Yii中 RBAC(基于角色的访问控制权限)表结构原理分析
这里有几个概念很重要,我简单用大白话说一下;
权限:
就是指用户是否可以执行哪些操作。
如:小张可以发帖、回帖、浏览,小红只能回帖、浏览
角色:
就是上面说的一组操作的集合。
如:高级会员有发帖、回帖、删贴、浏览的权限,普通会员只有回帖、浏览的权限。
比如小张是高级会员,那么他就可以执行发帖、回帖、删贴、浏览。而小红是普通会员,所以它就只能回帖、浏览。
另外角色还可以继承,中级会员除了普通会员的回帖、浏览功能外,还可以发帖。也就是说在普通会员的基础上又增加了一个发帖的权限。
在Yii2.0中
yii\rbac: Item 为角色或者权限的基类,其中用字段type来标识
yii\rbac: Role 为代表角色的类
yii\rbac: Permission 为代表权限的类
yii\rbac: Assignment 为代表用户角色或者权限的类
yii\rbac: Rule 为代表角色或权限能否执行的判定规则表
存储角色或权限的表:auth_item
由于它们的数据存储在一张表[auth_item]里面,所以他们有一个共同的基类yii\rbac:Item,用$type字段来标识是角色还是权限。
<ignore_js_op>
从上面可以看到,上面的三个是用户角色,下面的五个是权限。
角色权限关联表: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
hight_user和low_user的关系我们容易理解,middle_user就不一样了,它指定了另外一个角色:low_user和一个权限:add。
这个意思就是说middle_user包含了low_user的权限,另外又添加了一个add权限。
除了角色可以包含角色外,权限也是可以包含权限的。也就是说这个表里面有三个关系:
角色 包含 权限
角色 包含 角色
权限 包含 权限
如果要得到一个角色的所有的权限,要做两方面的查找,一个是递归查找当前权限所有的子权限, 一个是查看所包含的角色的所有的权限以及子权限。
所以在使用中不建议让权限继承,只让角色继承。而且继承深度也不宜太深。
最重要的也就是上面这两个表,具体的代码是怎么实现的会在后面源码分析里面说明。
用户角色(权限)表:[auth_assignment]
这个表用来存储用户的角色或者权限。
为什么是角色或者权限?
如上面,给角色指定权限有两种办法
一种是直接给角色指定相应的权限
一种是让一个角色继承(我始终觉的继承这个词要好于包含)自另外一个角色,另外还可以再单独指定其它的权限。
所以对用户而言也有两种方法。
一种是给用户指定相应的角色
一种是给用户指定相应的权限。
<ignore_js_op>
这样一个用户的权限包含两部分,一部分是所指定的角色代表的权限,一部分就是直接所指定的权限。
规则表:[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);
}
$name为规则的名称。
也就是说如果要在规则表:[auth_rule]中增加一条规则就得要有对应的规则类,并实现方法abstract public function execute($item, $params)具体的逻辑来判定$item(角色或者权限)是否可执行。
主要的分析也就完成了。关于这一部分的源码分析,过几天也会出来的。
哪一部分没说清楚或者还有其它问题都可以留言讨论。谢谢各位。喜欢的就顶一下。
原文链接:http://www.yiifans.com/forum.php?mod=viewthread&tid=74#lastpost
Yii中 RBAC(基于角色的访问控制权限)表结构原理分析的更多相关文章
- RBAC(基于角色的访问控制权限)表结构
Rbac 支持两种类,PhpManager(基于文件的) 和 DbManager(基于数据库的) 权限:就是指用户是否可以执行哪些操作 角色:就是上面说的一组操作的集合,角色还可以继承 在Yii2.0 ...
- YII RBAC基于角色的访问控制
基于角色的访问控制( Role-Based Access Control ),是一种简单的而又强大的集中访问控制.基于Yii Framework 的 authManager 组件实现了分等级的 RBA ...
- RBAC基于角色的访问控制
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用 ...
- RBAC 基于角色的访问控制
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色- ...
- RBAC: 基于角色的访问控制(Role-Based Access Control)
本文只讨论两种基于角色的访问控制的不同点,不涉及权限设计的数据库设计. 基于角色的访问控制(Role-Based Access Control)可分为隐式角色访问控制和显式角色访问控制. 隐式角色访问 ...
- Yii简单的基于角色的访问控制
public function filters() { return array( 'accessControl', // perform access control for CRUD operat ...
- php : RBAC 基于角色的用户权限控制-表参考
--管理员表 CREATE TABLE `sw_manager` ( `mg_id` int(11) NOT NULL AUTO_INCREMENT, `mg_name` varchar(32) NO ...
- YIi 权限管理和基于角色的访问控制
验证和授权(Authentication and Authorization) 定义身份类 (Defining Identity Class) 登录和注销(Login and Logout) 访问控制 ...
- 基于角色的访问控制 (RBAC)权限管理
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色- ...
随机推荐
- python查询
#coding=utf-8 import MySQLdb conn = MySQLdb.Connect(host = '127.0.0.1',port=3306,user='root',passwd= ...
- 使用VSTS/TFS搭建iOS持续集成环境
TFS 自2015版开始支持跨平台的持续集成环境,通过提供开源的build agent为 Windows / linux / macOS 提供了统一的持续集成环境管理能力.这篇文章给大家介绍一下如何使 ...
- IrregularGridCollectionView处理不定宽度的标签cell
IrregularGridCollectionView处理不定宽度的标签cell 效果 源码 https://github.com/YouXianMing/UI-Component-Collectio ...
- 64位Windows无法打开会声会影X5的解决方法
低版本和破解版都不好用了. 由于微软更新补丁而引起的会声会影停止工作的问题,建议大家卸载补丁[KB3126587]和[KB3126593][KB2140410 ]解决或者(修复包)修复,更换高版本使用 ...
- BZOJ 4300: 绝世好题 动态规划
4300: 绝世好题 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4300 Description 给定一个长度为n的数列ai,求ai的 ...
- Redis__WindowsServer主从服务部署及调用实例
本文转自:http://www.cnblogs.com/gossip/p/4898653.html 一.先谈谈单个Redis服务的安装 使用的redis是2.8.17版本,从官网下载解 ...
- android studio 翻译插件
插件下载地址 https://github.com/Skykai521/ECTranslation/releases 使用说明: http://gold.xitu.io/entry/573d8d92a ...
- C# 调用系统winmm.dll 播放音乐wav mp3
using System.Runtime.InteropServices;//放wav public partial class frmMain : Form { 系统放 播放音乐 wav mp3 [ ...
- Windows内核安全与驱动开发
这篇是计算机中Windows Mobile/Symbian类的优质预售推荐<Windows内核安全与驱动开发>. 编辑推荐 本书适合计算机安全软件从业人员.计算机相关专业院校学生以及有一定 ...
- 我也要学iOS逆向工程--函数
大家好,这篇我开始学习函数了.先学 C 函数,然后再 OC 的吧.OC 应该复杂点的吧. 然后看看汇编情况哦! 学习函数呢,肯定要弄清楚几个事情. 1.跳转地址. 2.返回地址 3.参数 4.函数获取 ...