【发布时间】:2015-01-01 08:48:52
【问题描述】:
到目前为止,我一直在使用 Yii 1.1.14 开发 Web 应用程序,但现在是升级的时候了。
我工作的公司已经开发了自己的访问控制系统,我对它真的很满意,直到我看到它真正的样子......数据库中8个表的组合(不包括用户表),有一堆外键。
- 1 个控制器表
- 1 个操作表
- 1 个菜单类别表
- 1 个用户类型表
- 而其他表基本上一次只连接 2 或 3 个表。
它运行良好,但在我看来,维护所有这些表非常耗时,并且在某些时候,当您的应用程序上线时,如果它遇到一定数量的用户,它可能会变得非常慢。特别是因为其中 2 个表将用户表的主键作为外键。
所以我决定,当我开始在 Yii 2 上进行开发时,我要开始使用 RBAC,所以我开始在网上寻找教程...... 只找到许多不同版本的相同代码的作者角色,以及创建或更新帖子的权限。
我在 Youtube 上找到了 5 个视频的组合,但它们是关于 Yii 1 RBAC 的。它们很有帮助,因为我设法理解了 RBAC 的大部分功能,但我仍然有一些疑问,我会 列举如下。请记住,对于这个访问控制系统,我使用的是 DBManager 类。
我的疑惑
Yii 1 的 RBAC 曾经有 3 个表:
auth_assignment、auth_item和auth_item_child。现在在 Yii 2 RBAC 中,出现了一个名为auth_rule的新表,我仍然不明白该特定表在那里做什么,如何使用它或如何填充它。-
我看到可以通过使用控制器的行为方法来限制用户对某些操作的访问,并根据用户的角色分配对某些操作的访问权限,但是当涉及到这一点时,我必须将我的问题分为 2:
2.1。 第一:如果你可以通过在behaviour方法中设置来限制对actions的访问,那么将权限保存到
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']); } } 由于我们现在使用的访问控制系统,当用户登录时,会执行一个复杂的查询,该查询最终将返回一个数组,该数组将保存为会话变量,并将用于创建一个包含与菜单类别一样多的下拉列表的菜单,用户有权访问的控制器属于该菜单。 RBAC 如何做到这一点?
【问题讨论】: