Yii2.0中文开发向导——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

Yii2.0中文开发向导——目录

Yii2.0中文开发向导——RBAC(基于角色的访问控制权限)表结构原理分析,布布扣,bubuko.com

时间: 2024-10-11 00:30:07

Yii2.0中文开发向导——RBAC(基于角色的访问控制权限)表结构原理分析的相关文章

Yii中 RBAC(基于角色的访问控制权限)表结构原理分析

这里有几个概念很重要,我简单用大白话说一下; 权限:就是指用户是否可以执行哪些操作. 如:小张可以发帖.回帖.浏览,小红只能回帖.浏览 角色:就是上面说的一组操作的集合. 如:高级会员有发帖.回帖.删贴.浏览的权限,普通会员只有回帖.浏览的权限.比如小张是高级会员,那么他就可以执行发帖.回帖.删贴.浏览.而小红是普通会员,所以它就只能回帖.浏览. 另外角色还可以继承,中级会员除了普通会员的回帖.浏览功能外,还可以发帖.也就是说在普通会员的基础上又增加了一个发帖的权限. 在Yii2.0中 yii\

Yii2.0中文开发向导——高级应用程序模板

高级应用程序模板这个模板用在大型的团队开发项目中,而且后台从前台独立分离出来以便于部署在多个服务器中.由于YIi2.0的一些新的特性,这个程序模板的功能要更深一点.提供了基本的数据库的支持,注册.密码找回等功能.安装可以通过Composer来安装如果没有安装Composer,先安装 curl -s http://getcomposer.org/installer | php 然后用如下命令来获取 php composer.phar create-project --prefer-dist --s

Yii2.0中文开发向导——控制器(Controller)

本节包含以下方面的内容 基本概念 路由 默认路由 动作的参数 在动作中定义参数 从请求(request)中获取参数 独立动作 动作过滤器(Action Filters) 捕获所有的请求 自定义响应类 控制器(Control)是应用程序中最关键的部分之一,它决定了如何处理传递进来的请求(Request),以及生成相应的响应(Response).大部分的控制器都会处理一个Http的请求,然后返回Html或者Json或者Xml格式的数据作为响应.1.基本概念控制器文件一般在应用程序的controlle

Yii2.0中文开发向导——控制器(Control)

本节包含以下方面的内容 基本概念 路由 默认路由 动作的参数 在动作中定义参数 从请求(request)中获取参数 独立动作 动作过滤器(Action Filters) 捕获所有的请求 自定义响应类 控制器(Control)是应用程序中最关键的部分之一,它决定了如何处理传递进来的请求(Request),以及生成相应的响应(Response).大部分的控制器都会处理一个Http的请求,然后返回Html或者Json或者Xml格式的数据作为响应.1.基本概念控制器文件一般在应用程序的controlle

Yii2.0中文开发向导——Yii2中多表关联查询(join、joinwith)(转)

我们用实例来说明这一部分 表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer   (id  customer_name) 订单表Order          (id  order_name       customer_id   book_id) 图书表                    (id  book_name       author_id) 作者表                    (id  author_name) 模型定义 下面是这4个个模型的定义,只写

Yii2.0中文开发向导——删除数据

直接 model 删除 $model = User::find($id); $model->delete(); 带有条件的删除 $connection ->createCommand() ->delete('tbl_user', 'status = 0') ->execute(); 使用 Query 查询删除 $connection ->createCommand('DELETE FROM tbl_user WHERE userid=:userid') ->execut

Yii2.0中文开发向导——rules常用规则

public function rules(){ return [ //必须填写 ['email, username, password,agree,verifyPassword,verifyCode', 'required'], //检查用户名是否重复 ['email','unique','message'=>'用户名已占用'], //用户输入最大的字符限制 ['email, username', 'length', 'max'=>64], //限制用户最小长度和最大长度 ['usernam

Yii2.0中文开发向导——Where条件查询全解析

在Yii的Model里进行查询的时候 where是必不可少的.Where方法声明为 static where( $condition ) 其中参数 $condition类型为字符串或者数组 1.字符串字符串是最简单的,直接按sql中的where条件写就可以,如 $condition = 'name=\'zhidemy.com\' and age>10'; 2.数组如果是数组的情况下,有两种格式的写法. name-value格式的字典数组:['column1' => value1, 'colum

RBAC 基于角色的访问控制演示

RBAC rbac:Role Based Access Controll,基于角色的访问控制. 今天理一理RBAC,话不多说,直接切入主题 功能需求: 权限管理(无限极) 角色管理(可以分配权限) 管理员管理(管理员属于哪些角色) 后台左侧显示当前登录用户所拥有的权限 超级管理员拥有所有权限 实现 建表(我们需要三个表,管理员表.角色表.权限表,tip:也可用其它建表方式) 管理员表 权限表 角色表 我制作完的三张表的CRUD,后台首页效果展示(具体的增删改查就不列步骤了): 管理员表 权限表