Yii2的权限控制RBAC模式

Yii2实践教程 2019年9月28日 2.49K

我们在《第十二篇:Yii2高级模版 – 权限管理扩展Yii2-admin》中虽然将菜单添加到后台的左侧,但是并不能通过权限控制不同的用户显示不同的菜单,所以我们还需要将菜单加到对应的权限下,这样才能更好的控制菜单,这节我们讲结合权限实现这个功能。

Yii2中的RBAC

RBAC:即基于角色的访问控制(Role-Based Access Control)。
RBAC 支持三个著名的安全原则:最小权限原则,责任分离原则和数据抽象原则。
Yii2的RBAC核心文件在@vendor\yiisoft\yii2\rbac目录下,数据表的创建信息在该目录的 migrations` 目录下(前面我们已经讲解了,如何创建RBAC数据表,大家可以翻看一下前面的章节)。

许可(Permission):包括许可标识、许可名称、受控对象、操作标识等。给出了受控对象与操作算子的对应关系。
角色(Role):包括角色标识、角色名称、角色基数、角色可用标识等。是系统角色集,由系统管理员定义角色。
用户(User):包括用户标识、用户姓名、用户登录密码等。是系统中的个体用户集,随用户的添加与删除动态变化。
规则(Rule):与一个角色或者权限关联。一个规则用一段代码代表, 规则的执行是在检查一个用户是否满足这个角色或者权限时进行的。

举一个形象的例子

对于【编辑】这一个角色,
我们可以给它分配不同的【许可权限】,比如删文章、发文章等。
【许可权限】删文章、发文章分别对应了不同的【规则】,
假设有【用户】editor这个账号,这个账号属于【编辑】这一个角色,它就拥有了删文章、发文章的权限了。

角色和权限都可以按层次组织。特定情况下,一个角色可能由其他角色或权限构成, 而权限又由其他的权限构成。

权限数据表

下面是我们创建好的四个和权限有关的数据表的意思:
auth_rule:单独存放Rule,跟auth_item中的rule_name字段对应 (规则表)
auth_item:存放Role和Permission,以type字段区别,1为Role,2为Permission (存储角色或权限的表)
auth_item_child:Role拥有的Permission,一个Role可以有多个Permission (角色权限关联表)
auth_assignment:用户拥有的Role,一个用户可以有多个Role (用户角色权限表)

[wppay]

权限基本类

yii\rbac\item 角色或者权限的基类,用字段type区分
yii\rbac\role . role为代表的角色类
yii\rbac\permission . 控制权限操作的类
yii\rbac\assignment . 用户与角色的关联
yii\rbac\rule . 判断角色权限的额外规则

下面我们说一下如何用权限控制后台菜单,这样可以更好理解权限这个概念。
首先打开后台布局 /backend/views/layouts/left.php 最顶部加入下面两个use
use yii\bootstrap\Nav;
use mdm\admin\components\MenuHelper;
然后删除之前的 dmstr\widgets\Menu::widget代码,加入如下代码

Nav::widget( [
 'encodeLabels' => false, 
 'options' => ['class' => 'sidebar-menu'], 
 'items' => MenuHelper::getAssignedMenu(Yii::$app->user->id), 
 ] );

这样后台就可以用权限控制啦,但是你会神奇的看见刷新页面后,整个菜单都没啦,不要着急,那是因为我们还没添加相应的菜单,还记得之前我们创的表有一个菜单表(menu)吗?
访问链接:http://www.feifeixueyuan.com/admin/menu 创建菜单分类,在看看数据库menu是不是有对应的分类啦。

[/wppay]

未经允许不得转载:飞飞学院 » Yii2的权限控制RBAC模式

文章评论

您需要之后才可以评论
9点赞 0评论 收藏 QQ分享 微博分享