说明
可以先参看 中文官方文档
yii 为我们提供的两种存储方式一种是文件方式一种是数据库方式,这里我们直接使用数据库的方式,yii 文档给的是直接写代码执行的方式,这种虽然更灵活,但是不够直观,而且最常用到的地方就是后台,所以我们使用可视化的模块 yii-admin
yii-admin
扩展过的rbac 和 yii 自带的有一点区别的是权限,yii以权限为基础,而yii-admin
是以路由为基础的,这一点会在验证的时候进行体现, yii的是Yii::$app->user->can(role||permission, params)
,而 yii-admin 的是Yii::$app->user->can(route, params)
准备
首先安装 yii-admin
扩展,github地址
创建表
执行创建相关表的 migrate
之前需要先配置一下权限管理方式,我们这里选择数据库存储方式(这里配置的是脚本的配置文件 console 下的)
两条命令,首先创建yii自带的rbac相关表
将会创建四张表
itemTable: 该表存放授权条目(译者注:即角色和权限)。默认表名为 “auth_item” 。
itemChildTable: 该表存放授权条目的层次关系。默认表名为 “auth_item_child”。
assignmentTable: 该表存放授权条目对用户的指派情况。默认表名为 “auth_assignment”。
ruleTable: 该表存放规则。默认表名为 “auth_rule”。
执行yii-admin带的menu表
将会得到一个menu表
配置
相关配置
应用
先感受一下配置好后进入admin模块的样子
路由 Route
路由相当于一个资源,最小单位
使用很简单, 1
、2
通过 3
添加到 5
,其中 1
是自己输入路由(以 /
开头),2
为自动检测出来的路由, 5
为添加到数据库的路由资源, 4
为移除 5
的操作
添加的路由会添加到 auth_item
表 ,如下
权限 permission
一个权限可以包含多个路由,和一个规则rule
添加权限
先创建一个权限
对应表的变化
然后增加路由
对应表的变化
角色 role
一个角色可以包含多个权限,多个路由和一个规则rule
添加角色
先创建一个角色
对应表的变化
然后增加权限或者路由
对应表的变化
分配角色权限
一个用户可以包含多个角色和权限,不能增加路由和规则rule了
首先我们会看到用户列表
进行权限分配
对应表的变化
测试结果
规则 rule
规则是对权限的补充,算是细分的权限,一般权限是对应这路由的,而规则可以更细一点,比方说一个角色没有更新文章的权限,但是他需要更新自己文章的权限,这时就需要给他赋值更新文章的权限,但是这样他权限就太大了,因为还可以更新别人的文章,这时就需要给他增加一个rule,来验证这篇文章是否属于自己,如果不属于自己则依旧没权限
我们以官网使用rule为例子 这里 来用 yii-admin 的方式实现
首先创建 rule 类, 如下
我们现在已经有 ibunao 用户了,角色(role1)、权限、路由如下
现在我们添加用户 jidan 用户,为了让其访问 /test/index3
添加rule
对应表的变化
增加权限绑定rule
对应表的变化
然后就是创建角色 role2, 并绑定用户 jidan
Rule类进行检验
我们可以直接在 execute()
方法中返回 true
或 false
, 请求 http://admin.yiilearn.com/test/index3?id=10
会发现分别是可以访问和拒绝访问,表示我们设置的rule已经生效了
我们可以根据传过来的参数来进行自己的逻辑判断,来进行拒绝和通过
使用yii的验证
|
|
用户列表
yii-admin
为后台也提供了一系列的用户操作功能(注册、改密码等),但是默认是没有显示的,需要自己根据自己的需要添加按钮
如果你的没有显示上面红框的内容可以参考我的代码
目录 menu
yii-admin
增加了目录功能,可以设置目录,然后根据用户的权限来显示目录
增加目录,数据的作用会在后面说
增加子目录,注意排序
增加子目录,注意排序
对应表的变化
目录显示
目录显示的代码
也可以参考以下不错的文章
北哥这篇文讲解yii2权限扩展(yii2-admin) - 上部
北哥这篇文讲解yii2权限扩展(yii2-admin) - 中部
北哥这篇文讲解yii2权限扩展(yii2-admin) - 下部
Yii2项目后台整合yii2-admin模块
Yii2基于角色的权限控制(RBAC)