我正在使用Yii2 basic和RBAC。我有一个管理员创建各种中心的场景。然后管理员创建用户并将用户分配给这些中心。每个中心都有多个用户。现在,这些用户创建不同的人员记录,每个用户都可以访问属于特定中心的用户创建的每个人的记录。
比如说A中心有两个用户。用户1和用户2可以创建人员记录。现在,用户1和用户2可以访问这些人的记录。其他中心用户无法访问用户1或用户2创建的属于中心A的记录,而在RBAC中创建规则时,第一返回语句是有效的,或者第二返回语句是有效的。
来自一个中心的用户可以访问他们的个人记录。但是来自其他中心的用户不应该能够访问这些人的A中心的记录。
报表1:
return isset($params['model']) ? ('user-' . $params['model']->UserId == $user) :false ;
报表2:
return isset($params['model']) ? ('center-' . $params['model']->CenterId== $user) :false ;
数据库结构
中心表
用户表
人表
Center_Assignment
所以我的规则执行函数如下所示
public function execute($user, $item, $params)
{
return isset($params['model']) ? ('center_assignment-' . $params['model']->CenterId== $user) :false ;
}
发布于 2022-02-26 12:14:29
如果您需要对数据进行逐行筛选,您可以重载它们的find
方法模型,以自动添加附加的where条件。这些条件可以使用关于当前用户的信息(例如使用Yii::$app->user->identity
),并使用andWhere
添加适当的限制条件。如果确保模型/表访问始终使用find
方法(数据访问的默认方式),则访问控制将有效。
https://stackoverflow.com/questions/71143558
复制相似问题