gpt4 book ai didi

php - 关于Yii2 RBAC的疑惑

转载 作者:可可西里 更新时间:2023-10-31 22:16:12 25 4
gpt4 key购买 nike

到目前为止,我一直在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com