0

我正在使用 Yii2 basic 和 RBAC。我有一个管理员创建各种中心的场景。然后管理员创建用户并将用户分配到这些中心。每个中心都有多个用户。现在这些用户创建不同的人员记录,每个用户都可以访问属于特定中心的用户创建的每个人的记录。

假设中心 A 有两个用户。用户 1 和用户 2 可以创建人员记录。现在用户 1 和用户 2 可以访问这些人的记录。其他中心用户无法访问属于中心 A 的用户 1 或用户 2 创建的这些人员记录。现在在 RBAC 中创建规则时,第一个返回语句有效或第二个返回语句有效

来自一个中心的用户可以访问他们的人员记录。但是其他中心的用户应该无法访问中心 A 的这些人的记录。

声明 1:

return isset($params['model']) ? ('user-' . $params['model']->UserId == $user) :false ;  

声明 2:

return isset($params['model']) ? ('center-' . $params['model']->CenterId== $user) :false ;

数据库结构

中心表

  1. 中心标识
  2. 中心名称

用户表

  1. 用户身份
  2. 姓名

人表

  1. 个人身份
  2. 中心标识
  3. 用户身份
  4. 人名

Center_Assignment

  1. 中心分配 ID
  2. 中心标识
  3. 用户身份

所以我的规则执行功能如下

public function execute($user, $item, $params)
    {

        return isset($params['model']) ? ('center_assignment-' . $params['model']->CenterId== $user) :false ;
    }
4

1 回答 1

0

如果您需要对数据进行每行过滤,您可以重载find它们模型的方法以自动添加额外的 where 条件。这些条件可以使用有关当前用户的信息(例如使用Yii::$app->user->identity),并使用 添加适当的限制条件andWhere。如果您确保模型/表访问将始终使用find方法(数据访问的默认方式),则访问控制将起作用。

于 2022-02-26T12:14:29.650 回答