php - 关于Yii2 RBAC的疑惑

标签 php yii2 rbac

到目前为止,我一直在使用 Yii 1.1.14 开发网络应用程序,但现在是升级的时候了。

我工作的公司已经开发了自己的访问控制系统,在我看到它真正的样子之前我真的很满意它......数据库中8个表的组合(不包括用户表),用一堆外键。

  • 1 个 Controller 表
  • 1 个操作表
  • 1 个菜单类别表
  • 1 个用户类型表
  • 而其他表基本上一次只连接其中的 2 或 3 个表。

它运行良好,但在我看来,维护所有这些表非常耗时,而且在某些时候,当您的应用程序上线时,如果它访问了一定数量的用户,它可能会变得非常慢。特别是因为其中 2 个表将用户的表主键作为外键。

所以我决定,当我开始在 Yii 2 上进行开发时,我将开始使用 RBAC,所以我开始在网上寻找教程......只找到具有作者角色的相同代码的许多不同版本,以及创建或更新帖子的权限。

我在 Youtube 上找到了 5 个视频的组合,但它们都是关于 Yii 1 RBAC 的。它们很有帮助,因为我设法理解了 RBAC 的大部分功能,但我仍然怀疑我是否会 下面列举。请记住,对于这个访问控制系统,我使用的是 DBManager 类。

我的疑问

  1. Yii 1 的 RBAC 曾经有 3 个表:auth_assignmentauth_itemauth_item_child。现在在 Yii 2 RBAC 中,出现了一个名为 auth_rule 的新表,我仍然不明白该特定表在那里做什么,如何使用它或如何填充它。

  2. 我看到可以通过使用 Controller 的行为方法来限制用户对某些操作的访问,并根据用户的角色分配对某些操作的访问权限,但是谈到这个我必须拆分我的问题分为 2:

    2.1。 第一:如果您可以通过在behaviors方法中设置来限制对操作的访问,那么将权限保存到auth_item表中有什么用?

    2.2。 第二:如果您确实决定根据权限控制访问,那么您具体是怎么做的,因为我发现自己在每个函数中都编写了以下类型的代码,而且我不认为使用 RBAC应该是这么乏味。必须有另一种方法。

    public function actionView($id)
    {
        if(Yii::$app->user->can('view-users')){
            return $this->render('view', [
                'model' => $this->findModel($id),
            ]);
        }else{
            #Redirect to a custom made action that will show a view 
            #with a custom error message
            $this->redirect(['//site/notauthorized']);
        }
    }
    
  3. 由于我们现在使用的访问控制系统,当用户登录时,将执行一个复杂的查询,该查询最终将返回一个数组,该数组将保存为 session 变量,并将用于创建一个菜单,其中包含与菜单类别一样多的下拉列表,用户有权访问的 Controller 属于该菜单。如何使用 RBAC 完成此操作?

最佳答案

我只能真正回答您问题的 2.2,因为 3 听起来根本不像是 RBAC 应该做的事情。但是,如果您遵循与您的 Controller 或操作相匹配的命名约定,您很可能会从规则表中获取所需的信息。

关于回答 2.2:

您可以像这样简单地设置行为:

public function behaviors()
{
    return [
        'access' => [
            'class' => AccessControl::className(),
            'rules' => [
                [
                    'allow' => true,
                    'actions' => ['view'],
                    'roles' => ['view-users'], //<-- Note, rule instead of role
                ],
        ]
    ]
}

这并没有解决“view-own-users”样式权限的不同问题,因为这需要检查 ActiveRecord 模型(好吧,至少在我的应用程序中是这样)。如果您想实现这一目标,请在此处查看我在 Yii 论坛中的帖子:

http://www.yiiframework.com/forum/index.php/topic/60439-yii2-rbac-permissions-in-controller-behaviors/#entry269913

关于php - 关于Yii2 RBAC的疑惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26752495/

相关文章:

没有参数绑定(bind)的PHP SQL注入(inject)预防

gridview - Yii2 格式化程序 - 创建自定义格式

php - 如何使用 Yii2 架构构建器进行迁移?

mysql - 盘点产品库存

amazon-web-services - 用于处理 AWS S3 中文件访问权限管理的 AWS 架构

reactjs - 用户信息存放在redux store还是本地存储中?

php - 如何添加 woocommerce 自定义订单状态?

php - 整数相除得到整数值

php - 如何在php中将数据库记录一条一条发送到另一个页面

security - 基于角色的访问控制 (RBAC) 关心权限还是角色?