首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RBAC中的Yii 2规则条件

RBAC中的Yii 2规则条件
EN

Stack Overflow用户
提问于 2022-02-16 14:19:26
回答 1查看 56关注 0票数 0

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

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

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

报表1:

代码语言:javascript
运行
复制
return isset($params['model']) ? ('user-' . $params['model']->UserId == $user) :false ;  

报表2:

代码语言:javascript
运行
复制
return isset($params['model']) ? ('center-' . $params['model']->CenterId== $user) :false ;

数据库结构

中心表

  1. CenterId
  2. CenterName

用户表

  1. UserId
  2. Name

人表

  1. PersonId
  2. CenterId
  3. UserId
  4. PersonName

Center_Assignment

  1. CenterAssignId
  2. CenterId
  3. UserId

所以我的规则执行函数如下所示

代码语言:javascript
运行
复制
public function execute($user, $item, $params)
    {

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

回答 1

Stack Overflow用户

发布于 2022-02-26 12:14:29

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71143558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档