[Yii][RBAC]Yii中应用RBAC完全指南
开端筹办
Yii供给了强大的设备机制和很多现成的类库。在Yii中应用RBAC是很简单的,完全不须要再写RBAC代码。所以筹办工作就是,打开编辑器,跟我来。
设置参数、建树数据库
在设备数组中,增长以下内容:
'components' => array(//……'authManager'=>array('class'=>'CDbAuthManager',//认证类名称'defaultRoles'=>array('guest'),//默认角色'itemTable' => 'pre_auth_item',//认证项表名称'itemChildTable' => 'pre_auth_item_child',//认证项父子关系'assignmentTable' => 'pre_auth_assignment',//认证项赋权关系),//……
那这三个数据表怎么建树呢?很简单,去看framework/web/auth/schema.sql。重视要和你的自定义的表名称对应起来。比如SQL文件中的AuthItem你要批改为pre_auth_item。然后在数据库中运行这个SQL文件中的语句。
懂得概念
你可能要问,剩下的代码呢?我告诉你,没有啦。RBAC体系就如许建树起来了。然则为了应用它,你须要懂得它的运行机制。我会尽量讲的烦琐一点……(官方的RBAC文档在这里,然则我曾经看了4-5遍才熟悉打听。)
三个概念
你须要懂得的是,授权项目可分为operations(步履),tasks(任务)和 roles(角色)。
一个用户拥有一个或者多个角色,比如,我们这里有三个角色:银行行长、银行人员、顾客。我们假设:
* 张行长 有角色:银行行长、银行人员、顾客(人家本身可以存钱嘛)。
* 王人员 有角色:银行人员、顾客。
* 小李 有角色:顾客。
那么,响应的,只要顾客可以做的工作,小李就可以做,王人员和张行长也可以。银行人员可以做的工作,王人员和张行长都可以做,小李就不成以了。
比如,一个“顾客”可以存钱,那么拥有“顾客”角色的张行长、王人员、小李都可以存钱。“银行人员”可以打印顾客的交易记录,那么有“银行人员” 角色的张行长和王人员都可以,而小李不可,必须找一个有“银行人员”角色的人才可以打印具体的交易记录。一个“银行行长”才可以进入银行钱库提钱,那么只 有张行长可以,因为它才有“银行行长”的角色。
这就是基于角色的认证体系,简称RBAC。
角色的持续
角色是可以持续的,比如我们规定如下:
* 凡是“银行行长”都是“银行人员”,也就是说,只要银行人员可以做的工作,银行行长都可以做。
* 凡是“银行人员”都是顾客,同上,顾客可以做的工作银行人员也可以做。
那么角色关系就变成了:
* 张行长 有角色:银行行长。
* 王人员 有角色:银行人员。
* 小李 有角色:顾客。
如许更简单了,这就是角色的持续。
任务的持续
一个任务(task)是可以包含别的一个任务的,我们举个例子,比如“进入银行”。
我们设定“顾客”这个角色有“进入银行”的权限。也就是说,“顾客”可以履行“进入银行”的任务。接下来,我们假设“进入柜台”是进入银行的父权 限,也就是说,“进入柜台”包含“进入银行”。只要能“进入柜台”的人都可以“进入银行”。我们把“进入柜台”这个任务权限给“银行人员”。
那么从角色上来说,王人员可以进入银行,因为王人员的角色是“银行人员”,而“银行人员”包含了“顾客”的角色。那么“顾客”可以进行的“任务”对于“银行人员”来说也是可以进行的。而“顾客”可以“进入银行”,那么王人员也可以“进入银行”。这是角色的持续带来的。
我们再假设有个赵辅导,是上级辅导,可以进入柜台进行观察。那么,我们的任务关系是:
* 赵辅导 有任务:进入柜台。
那么,赵辅导就可以“进入银行”。因为“进入银行”是被“进入柜台”包含的任务。只要可以履行“进入柜台”的人都可以履行“进入银行”。这就是任务的持续。
关于步履
步履是不成划分的一级。也就是说。而一个步履是不克不及包含其他步履的。假设我们有个步履叫“从银行仓库中提钱”。我们把这个步履作包含“进入柜台”。那么只要可以履行“从银行仓库中提钱”的角色都可以履行“进入柜台”这个任务。
三者关系
* 一个角色可以包含别的一个或者几个角色。
* 一个角色可以包含别的一个或者几个任务。
* 一个角色可以包含别的一个或者几个步履。
*
* 一个任务可以包含别的一个或者几个任务。
* 一个任务可以包含别的一个或者几个步履。
*
* 一个步履只能被角色或者任务包含,步履是不成以包含其他,也不成再分。
如许,就形成了一个权限经管体系。关于“任务”和“步履”,你不必思虑其字面上的意义。这两者就是形成两层权限。
进行赋权
我们建树了RBAC权限经管,就须要进行对权限的WEB经管。这些就须要你本身写代码了。
按照不合种类的项目调用下列办法之必然义授权项目:
* CAuthManager::createRole
* CAuthManager::createTask
* CAuthManager::createOperation
一旦我们拥有一套授权项目,我们可以调用以下办法建树授权项目关系:
* CAuthManager::addItemChild
* CAuthManager::removeItemChild
* CAuthItem::addChild
* CAuthItem::removeChild
最后,我们调用下列办法来分派角色项目给各个用户:
* CAuthManager::assign
* CAuthManager::revoke
下面我们将显现一个例子是关于用所供给的API建树一个授权等级:
$auth=Yii::app()->authManager;$auth->createOperation("createPost","create a post");$auth->createOperation("readPost","read a post");$auth->createOperation("Post"," a post");$auth->createOperation("Post"," a post");$bizRule="return Yii::app()->user->id==$params["post"]->authID;";$task=$auth->createTask("OwnPost"," a post by author himself",$bizRule);$task->addChild("Post");$role=$auth->createRole("reader");$role->addChild("readPost");$role=$auth->createRole("author");$role->addChild("reader");$role->addChild("createPost");$role->addChild("OwnPost");$role=$auth->createRole("editor");$role->addChild("reader");$role->addChild("Post");$role=$auth->createRole("admin");$role->addChild("editor");$role->addChild("author");$role->addChild("Post");$auth->assign("reader","readerA");$auth->assign("author","authorB");$auth->assign("editor","editorC");$auth->assign("admin","adminD");
也就是说,你须要本身写一个经管界面,来列出你的角色、任务、步履,然后可以在这个界面长进行经管。比如增长、删除、批改。
权限搜检
假设你在你的经管界面进行了赋权,那么可以在法度里面进行权限搜检:
if( Yii::app()->user->checkAccess("createPost") ){// 这里可以显示表单等操纵 } else {// 搜检没有经由过程的可以跳转或者显示警告 }
上方的代码就搜检了用户是否可以履行“createPost”,这createPost可能是一个任务,也可所以一个步履。
其他的:
对于很多说Yii权限体系RBAC不好用的人其实都没有看懂文档。综合我的体验,我感触感染Yii框架的RBAC是我用过的框架里面最好用的。并且是须要本身写代码起码的。
Yii的RBAC有加倍高等的用法,比如“营业规矩”,“默认角色”。你可以去参考官方文档。
我知道,会有项目组人仿照还是不睬解RBAC,或者不会用Yii的RBAC。没有关系,你可以鄙人方的评论框里提问。
happy Yii !
From; http;//my.oschina.net/o0Kira0o/blog/95036
转载于:https://www.cnblogs.com/imxiu/p/3415081.html
[Yii][RBAC]Yii中应用RBAC完全指南相关推荐
- php行为和事件是什么,Yii Framework框架中事件和行为的区别及应用实例分析
本文实例讲述了Yii Framework框架中事件和行为的区别及应用.分享给大家供大家参考,具体如下: 个人觉得,在 Yii 里面,最难以明白的就是事件(Event)和行为(behavior)了.这不 ...
- gin框架学习-Casbin入门指南(ACL、RBAC、域内RBAC模型)
目录 前言 一.Casbin概述 二.Casbin工作原理 三.Model语法 1.Request定义 2.Policy定义 3.Matcher定义 4.Policy effect定义 1)some( ...
- php的yii简介,yii
Yii Framework是一个基于组件.用于开发大型Web应用的高性能 PHP 框架.Yii提供了今日Web 2.0应用开发所需要的几乎一切功能.Yii是最有效率的PHP框架之一.Yii是创始人薛强 ...
- php 的 yii 框架,yii 框架的详情
一.什么是yii框架 Yii读做易,可以看做是Yes it is的缩写.Yii有两种中文含义,1.极致简单.2.不断演变.Yii是一个基于组件.用于开发大型Web应用的高性能PHP框架.Yii提供了今 ...
- php yii model,Yii模型
属性 属性代表业务数据.它们可以像数组元素或对象的属性那样来访问.一个模型的每个属性都是公开访问的属性.要指定模型拥有什么属性,应该重写yii\base\Model::attributes() 方法. ...
- php+yii框架,yii框架源码分析(一)
yii框架源码分析(一) 本文将对yii中的mvc,路由器,filter,组件机制等最主要的部分进行自己的一点浅析,力求说明自己做一个php mvc不是那么的遥不可及,其实是很简单的. 源码基于yii ...
- k8s基础11——安全控制之RBAC用户授权、RBAC用户组授权、SA程序授权
文章目录 一.K8s安全框架 1.1 鉴权 1.1.1 HTTPS证书认证 1.1.2 HTTP Token认证 1.2 授权 1.3 准入控制 1.4 集群四大角色 二.RBAC给用户授权(TLS) ...
- go语言复数包_Go语言中包的风格指南
Go 语言也有自己的命名与代码组织规则.漂亮的代码,布局清晰.易读易懂,就像是设计严谨的 API 一样.拿到代码,用户首先看到和接触的就是布局.命名还有包的结构. 这篇文章不是为了给大家设立硬性的规定 ...
- [Yii Framework] Yii如何实现前后台的session分离
Yii Framework实现前后台frontend,backend分离的方法有几种,总结如下: 1. 分开入口文件 目录结构 index.php admin.php assets/ ...其它目录 ...
最新文章
- 从15000个Python开源项目中精选的Top30,Github平均star为3707,赶紧收藏!
- 初学rpa的十大经典错误及解决办法_Python3之十大经典错误及其解决办法
- 如何在Java代码中使用SAP云平台CloudFoundry环境的环境变量
- mybatis学习(1):【持久化框架】Mybatis简介与原理
- 地壳中元素含量排名记忆口诀_高中化学短周期元素推断题的常见题眼
- 给软件工程师的学习参考
- LeetCode 128. 最长连续序列(Longest Consecutive Sequence)
- Qt读取海康威视NVR服务器视频
- 专科学校计算机是必修课吗,高等专科学校公共计算机选修课的开展与探索
- 情侣博客源码php,wordpress如何搭建简单的情侣博客
- 微波雷达感应模块,智能马桶传感方案,智能化生活
- 【黄啊码】微信小程序+php实现即时通讯聊天功能
- Pixel 3 的最佳照片功能
- 关闭WIN7休眠功能
- UEFI 是什么?硬盘的EFI分区? .efi格式的文件?UEFI 标准定义了一种可执行文件格式:efi格式
- uq mysql_MySQL workbench中的PK,NN,UQ,BIN,UN,ZF,AI说明
- 推荐几个2020年最实用的网站!
- Unity3D学习笔记6——GPU实例化(1)
- 上海大学计算机专硕与学硕,计算机学院2017届留沪研究生学习成绩综合评定工作通知...
- 北大计算机博士有多难考,我是怎样考上北大博士的
热门文章
- 工作流之流程定义存储表
- elementui带输入建议查询_知道Profiler是什么吗?带你了解SQL Server的性能优化工具...
- thinkphp漏洞_【组件攻击链】ThinkCMF 高危漏洞分析与利用
- C语言链表交换相邻节点,LeetCode 24--两两交换链表中的节点 ( Swap Nodes in Pairs ) ( C语言版 )...
- 从linux使用sz命令下载大于4g的文件到windows
- 人工神经网络理论、设计及应用_红层软岩大直径素混凝土置换桩复合地基设计理论及应用研究——以成都 ICON云端项目为例...
- 常用连续型分布介绍及R语言实现
- 简单实现x的n次方pta_Day12 :数值的整数次方
- 人脸检测(十四)--MTCNN
- 前景检测算法(十二)--基于模糊Choquet积分