Yii2基于角色的访问控制权限RBAC表结构原理分析
来源:互联网 发布:纪念册制作软件app 编辑:程序博客网 时间:2024/05/02 00:22
这里有几个概念很重要
权限:就是指用户是否可以执行哪些操作。
如:小张可以发帖、回帖、浏览,小红只能回帖、浏览
角色:
就是上面说的一组操作的集合。
如:高级会员有发帖、回帖、删贴、浏览的权限,普通会员只有回帖、浏览的权限。
比如小张是高级会员,那么他就可以执行发帖、回帖、删贴、浏览。而小红是普通会员,所以它就只能回帖、浏览。
另外角色还可以继承,中级会员除了普通会员的回帖、浏览功能外,还可以发帖。也就是说在普通会员的基础上又增加了一个发帖的权限。
在Yii2中
- yii\rbac: Item 为角色或者权限的基类,其中用字段type来标识
- yii\rbac: Role 为代表角色的类
- yii\rbac: Permission 为代表权限的类
- yii\rbac: Assignment 为代表用户角色或者权限的类
- yii\rbac: Rule 为代表角色或权限能否执行的判定规则表
这个表用来存储角色和权限的数据,Role类和Permission类有一个共同的基类yii\rbac:Item,用$type字段来标识是角色还是权限。
从上面可以看到,上面的三个是用户角色,下面的五个是权限。
角色权限关联表:auth_item_child
上面我们说过,角色是一组权限的集合,所以还有一个表[auth_item_child]用来保存角色和权限的关系。
写几个测试数据会看的更明白,现在我们在表auth_item_child中指定它们的关系
- parent child
- hight_user add
- hight_user edit
- hight_user delete
- ......
- low_user reply
- low_user view
- ..................
- middle_user low_user
- middle_user add
这个意思就是说middle_user包含了low_user的权限,另外又添加了一个add权限。
除了角色可以包含角色外,权限也是可以包含权限的。也就是说这个表里面有三个关系:
- 角色 包含 权限
- 角色 包含 角色
- 权限 包含 权限
所以在使用中不建议让权限继承,只让角色继承。而且继承深度也不宜太深。
最重要的也就是上面这两个表。
用户角色(权限)表:auth_assignment
这个表用来存储用户的角色或者权限。
为什么是角色或者权限?
如上面,给角色指定权限有两种办法
- 一种是直接给角色指定相应的权限
- 一种是让一个角色继承(我始终觉的继承这个词要好于包含)自另外一个角色,另外还可以再单独指定其它的权限。
- 一种是给用户指定相应的角色
- 一种是给用户指定相应的权限。
如图所示:
这样一个用户的权限包含两部分,一部分是所指定的角色代表的权限,一部分就是直接所指定的权限。
规则表:auth_rule
一个用户要执行一个操作除了要看他有没有这个权限外,还要看他的这个权限能不能执行。
在上面的表:auth_item中还有一个字段:[rule_name]。这个字段用来标明这个角色或者权限能不能成功执行。
那么规则这个表里面的数据是从哪里来的呢?
下面这个是规则的基类:
- abstract class Rule extends Object
- {
- /**
- * @var string name of the rule
- */
- public $name;
- /**
- * @var integer UNIX timestamp representing the rule creation time
- */
- public $createdAt;
- /**
- * @var integer UNIX timestamp representing the rule updating time
- */
- public $updatedAt;
- /**
- * Executes the rule.
- *
- * @param Item $item the auth item that this rule is associated with
- * @param array $params parameters passed to [[ManagerInterface::allow()]].
- * @return boolean a value indicating whether the rule permits the auth item it is associated with.
- */
- abstract public function execute($item, $params);
- }
也就是说如果要在规则表:[auth_rule]中增加一条规则就得要有对应的规则类,并实现方法abstract public function execute($item, $params)具体的逻辑来判定$item(角色或者权限)是否可执行。
0 0
- Yii2基于角色的访问控制权限RBAC表结构原理分析
- Yii2.0中文开发向导——RBAC(基于角色的访问控制权限)表结构原理分析
- Yii2.0中文开发向导——RBAC(基于角色的访问控制权限)表结构原理分析 - yiifans
- Yii2.0中文开发向导——RBAC(基于角色的访问控制权限)表结构原理分析
- Yii2.0中文开发向导——RBAC(基于角色的访问控制权限)表结构原理分析
- YII2.0框架(五) RBAC基于角色的权限控制源码透析yii\rbac\DbManager
- 基于角色的访问控制 (RBAC)权限管理
- RBAC基于角色的访问控制模型(权限管理)
- 【基于角色的访问控制RBAC】权限与资源树
- RBAC权限管理(基于角色的访问控制)
- 基于角色的权限控制 - RBAC
- RBAC基于角色的权限控制
- 基于角色的访问控制-rbac-yii
- RBAC基于角色的访问控制 thinkphp
- 基于角色的访问控制RBAC的mysql表设计
- 权限管理:RBAC(基于角色的访问控制)SpringMVC实现
- Thinkphp的RBAC,基于角色的权限控制
- ThinkPHP的RBAC(基于角色权限控制)详解
- 中航重机 600765
- java集合框架详解(三)、List接口
- Android自定义控件与属性
- VHDL 基础知识(1)
- hdu 2036
- Yii2基于角色的访问控制权限RBAC表结构原理分析
- ER图实例解析
- 【Caffe实践】 添加自己的网络层
- C++中如何避免内存泄露
- CAFFE安装2:MKL python 和 caffe
- Socket基本API 总结
- 定时器-NSTimer
- HDOJ 3664 Permutation Counting
- 运维角度浅谈:MySQL数据库优化