到目前为止,我一直在使用 Yii 1.1.14 开发 Web 应用程序,但现在是时候进行升级了。
我工作的公司开发了自己的访问控制系统,我对它真的很满意,直到我看到它到底是什么样子......数据库中8个表的组合(不包括用户表),还有一堆外键。
- 1 个控制器表
- 1 个操作表
- 1 个菜单类别表
- 1 个用户类型表
- 其他表基本上一次只连接 2 或 3 个表。
它工作得很好,但在我看来,维护所有这些表非常耗时,并且在某些时候,当您的应用程序上线时,如果它达到一定数量的用户,它可能会变得非常慢。特别是因为其中 2 个表将用户的表主键作为外键。
所以我决定,当我开始在 Yii 2 上开发时,我将开始使用 RBAC,所以我开始在网上寻找教程......只找到具有作者角色和权限的相同代码的许多不同版本创建或更新帖子。
我在 Youtube 上找到了 5 个视频的组合,但它们都是关于 Yii 1 RBAC 的。它们很有帮助,因为我设法理解了 RBAC 的大部分功能,但我仍然有一些疑问:
列举如下。请记住,对于这个访问控制系统,我使用的是数据库管理器 class.
我的疑虑
Yii 1 的 RBAC 曾经有 3 个表:auth_assignment
, auth_item
and auth_item_child
。现在在 Yii 2 RBAC 中,出现了一个新表,名为auth_rule
我仍然不明白那个特定的表在那里做什么,如何使用它或如何填充它。
-
我发现可以通过使用控制器的行为方法来限制用户对某些操作的访问,并根据用户的角色分配对某些操作的访问权限,但是当涉及到这一点时,我必须将我的问题分为 2 个:
2.1. First:如果你可以通过在behaviors方法中设置来限制对actions的访问,那么将权限保存到auth_item
table?
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 来完成此操作?
我只能真正回答你问题的 2.2,因为 3 听起来根本不像 RBAC 应该做的事情。但是,只要您遵循与您的控制器或操作相匹配的命名约定,您就很可能从规则表中获取所需的信息。
继续回答2.2:
您可以简单地设置这样的行为:
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'rules' => [
[
'allow' => true,
'actions' => ['view'],
'roles' => ['view-users'], //<-- Note, rule instead of role
],
]
]
}
这并不能解决“查看自己的用户”样式权限的不同问题,因为这需要检查 ActiveRecord 模型(好吧,至少在我的应用程序中是这样)。如果您想实现这一目标,请查看我在 Yii 论坛中的帖子:
http://www.yiiframework.com/forum/index.php/topic/60439-yii2-rbac-permissions-in-controller-behaviors/#entry269913 http://www.yiiframework.com/forum/index.php/topic/60439-yii2-rbac-permissions-in-controller-behaviors/#entry269913
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)