这里有几个概念很重要,我简单用大白话说一下;
权限:
就是指用户是否可以执行哪些操作。
如:小张可以发帖、回帖、浏览,小红只能回帖、浏览
角色:
就是上面说的一组操作的集合。
如:高级会员有发帖、回帖、删贴、浏览的权限,普通会员只有回帖、浏览的权限。
比如小张是高级会员,那么他就可以执行发帖、回帖、删贴、浏览。而小红是普通会员,所以它就只能回帖、浏览。
另外角色还可以继承,中级会员除了普通会员的回帖、浏览功能外,还可以发帖。也就是说在普通会员的基础上又增加了一个发帖的权限。
在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+admin后台以及rbac权限
Yii2.0级基于Yii1.X完全重写的,不仅是小版本升级的升级。所以想要系统学习Yii2.0这个框架这套教程可以从实战项目带你入手。不错的学习YII框架的基础课程,电商系统的结构完整、框架资源太大,传百度网盘了,链接在...
根据提供的描述,“yii2.0官方比较全的中文手册”提供了关于Yii2.0框架的详细介绍及其安装方法,这对于想要使用Yii2.0进行Web开发的开发者来说是一个非常宝贵的资源。 #### 二、安装Yii2.0的两种主要方式 ##### 1....
Yii 2.0 是一个高性能、基于组件的 PHP 框架,专为开发Web 2.0应用程序而设计。这个“yii2.0中文完全手册”提供了全面的指南,帮助开发者深入理解和有效地利用该框架。 一、Yii 2.0 基础概念 Yii 2.0 的核心理念是...
采用的方式是分析框架的源代码,尝试从根上进行理解和阐述,并融入个人使用Yii开发的一些经验和教训。 通过本书,你将不仅仅了解到Yii怎么使用的实操技巧,还将掌握其实现的技术原理和内幕。 更为重要的是,接触...
### Yii2.0中文学习手册知识点总结 #### 一、简介 - **Yii2.0**是一款基于PHP的高性能Web应用程序开发框架,以其简洁、高效、安全的特点深受开发者喜爱。本手册旨在帮助初学者和进阶用户快速掌握Yii2.0的核心概念与...
5. RBAC(Role-Based Access Control):框架内置权限控制,可以根据角色分配不同的访问权限。 在开发过程中,你还可以利用Yii2.0的Gii工具快速生成模型、控制器和视图代码,减少重复工作。同时,框架支持Composer...
Yii2.0采用特定的目录结构和约定来优化开发流程。了解Yii应用的目录结构和入口脚本是开发的基础。别名(Alias)机制提供了一种快捷方式来引用项目中的文件路径。Yii的类自动加载机制减少了手动包含文件的需要,而...
1. **Yii 2.0 基础**:了解 Yii 框架的结构,包括 MVC 设计模式、路由、控制器、视图、模型的使用。 2. **组件化编程**:学习如何在 Yii 2.0 中创建和使用组件,以及如何扩展内置组件以满足特定需求。 3. **数据库...
- **框架结构介绍**:解释 Yii2.0 的基本目录结构、文件组织方式。 - **控制器与视图**:详细介绍如何创建控制器、视图文件以及实现基本的路由机制。 - **模型与数据库操作**:学习使用 Active Record 进行数据库...
在使用"2016YII2.0中文手册.chm"时,您可以利用其索引和搜索功能快速定位到特定主题,无论是初学者还是经验丰富的开发者,这个手册都是Yii 2.0开发的重要参考资料。通过深入学习和实践,您将能够充分利用Yii 2.0的...
### Yii 2.0开发一个仿京东商城平台 #### 一、项目背景与目标 在当前电子商务迅猛发展的背景下,各种在线购物平台如雨后春笋般涌现。本项目旨在使用PHP框架Yii 2.0来开发一个类似京东的电商网站。通过本项目的实践...
Yii 是一个通用的 Web 编程框架,即可以用于开发各种用 ... 因为基于组件的框架结构和设计精巧的缓存支持,它特别适合开发大型应用, 如门户网站、社区、内容管理系统(CMS)、 电子商务项目和 RESTful Web 服务等。
5. **后端开发**:后端基于Yii 2.0的MVC架构,包括模型(Model)、视图(View)和控制器(Controller)。模型处理数据操作,视图负责展示,而控制器处理HTTP请求并协调模型和视图。 6. **数据库支持**:Yii 2.0 ...
在权限管理方面,Yii2.0提供了RBAC(Role-Based Access Control)功能,这是一种基于角色的访问控制机制。通过RBAC,可以定义不同角色,比如管理员、普通用户等,每个角色拥有不同的权限,可以访问特定的资源或执行...
- **MVC 设计模式**:Yii 实现了 MVC(模型-视图-控制器)设计模式,这是一种常见的 Web 开发模式,有助于将应用程序的业务逻辑、数据处理与界面展示分离。 - **全功能栈**:Yii 提供了一系列丰富的功能,例如查询...
yii2.0中文手册。Yii是一个高性能的PHP5的web应用程序开发框架。通过一个简单的命令行工具 yiic 可以快速创建一个web应用程序的代码框架,开发者可以在生成的代码框架基础上添加业务逻辑,以快速完成应用程序的开发...
yii2.0的rbac权限管理
- 权限管理:利用RBAC(基于角色的访问控制)实现权限分配。 - **数据过滤**:对于用户提交的数据进行过滤处理,防止非法输入。 - 输入验证:使用模型的验证规则检查数据的有效性。 - 安全函数:利用Yii提供的...