迄今为止,我一直在使用Yii 1.1.14开发web应用程序,但现在是升级的时候了。对Yii2 RBAC的怀疑
我工作的公司开发了自己的访问控制系统,直到我看到它真的是什么样子的时候,我才真正确定...数据库中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。 第一条:如果您可以通过在behavior方法中设置操作来限制对操作的访问,那么对
auth_item
表保存权限有什么用处?2.2。 Second:如果你决定根据权限控制访问,那么你到底该怎么做,因为我发现自己在每个函数中都写了下列类型的代码,我不认为使用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如何做到这一点?
你应该在这里写出答案的相关部分,而不只是链接到一些资源。 – GMchris 2016-02-24 13:43:37