Yii的acce***ules用法
访问控制过滤器(Access Control Filter)
访 问控制过滤器是检查当前用户是否能执行访问的controller action的初步授权模式。这种授权模式基于用户名,客户IP地址和访问类型。访问控制过滤器适用于简单的验证。需要复杂的访问控制,需要使用将要讲解 到的基于角色访问控制(role-based access (RBAC)).
在控制器(controller)里重载CController::filters方法设置访问过滤器来控制访问动作(看 Filter 了解更多过滤器设置信息)。
- class PostController extends CController
- {
- ......
- public function filters()
- {
- return array(
- 'accessControl',
- );
- }
- }
在上面,设置的access control过滤器将应用于PostController里每个动作。过滤器具体的授权规则通过重载控制器的CController::acce***ules方法来指定。
- class PostController extends CController
- {
- ......
- public function acce***ules()
- {
- return array(
- array('deny',
- 'actions'=>array('create', 'edit'),
- 'users'=>array('?'),
- ),
- array('allow',
- 'actions'=>array('delete'),
- 'roles'=>array('admin'),
- ),
- array('deny',
- 'actions'=>array('delete'),
- 'users'=>array('*'),
- ),
- );
- }
- }
上 面设定了三个规则,每个用个数组表示。数组的第一个元素不是'allow'就是'deny',其他的是名-值成对形式设置规则参数的。上面的规则这样理 解:create和edit动作不能被匿名执行;delete动作可以被admin角色的用户执行;delete动作不能被任何人执行。
访问规则是一个一个按照设定的顺序一个一个来执行判断的。和当前判断模式(例如:用户名、角色、客户端IP、地址)相匹配的第一条规则决定授权的结果。如果这个规则是allow,则动作可执行;如果是deny,不能执行;如果没有规则匹配,动作可以执行。
为了确保某类动作在没允许情况下不被执行,设置一个匹配所有人的deny规则在最后,类似如下:
- return array(
- // ... 别的规则...
- // 以下匹配所有人规则拒绝'delete'动作
- array('deny',
- 'action'=>'delete',
- ),
- );
因为如果没有设置规则匹配动作,动作缺省会被执行。
访问规则通过如下的上下文参数设置:
actions: 设置哪个动作匹配此规则。
users: 设置哪个用户匹配此规则。此当前用户的name 被用来匹配. 三种设定字符在这里可以用:
*: 任何用户,包括匿名和验证通过的用户。
?: 匿名用户。
@: 验证通过的用户。
roles: 设定哪个角色匹配此规则。这里用到了将在后面描述的role-based access control技术。In particular, the rule is applied if CWebUser::checkAccess returns true for one of the roles.提示,用户角色应该被设置成allow规则,因为角色代表能做某些事情。
ips: 设定哪个客户端IP匹配此规则。
verbs: 设定哪种请求类型(例如:GET, POST)匹配此规则。
expression: 设定一个PHP表达式。它的值用来表明这条规则是否适用。在表达式,你可以使用一个叫$user的变量,它代表的是Yii::app()->user。
访问规则中:
expression: 设定一个PHP表达式。它的值用来表明这条规则是否适用。在表达式,你可以使用一个叫$user的变量,它代表的是Yii::app()->user。
expression的具体用法:
- class AdminController extends CController
- {
- ……
- public function acce***ules()
- {
- return array(
- array('allow', //允许所有人执行'login','error','index'
- 'actions'=>array('login','error','index'),
- 'users'=>array('*'),
- ),
- array('allow', //允许超级管理员执行所有动作
- 'actions'=>array('create','update','delete'),
- 'expression'=>array($this,'isSuperAdmin'),
- ),
- array('allow',//允许普通管理员执行
- 'actions'=>array('update'),
- 'expression'=>array($this,'isNormalAdmin'), //表示调用$this(即AdminController)中的isNormalAdmin方法。
- ),
- array('deny', // deny all users
- 'users'=>array('*'),
- ),
- );
- }
- protected function isSuperAdmin($user)//判断是否是超级管理员
- {
- return ($this->loadModel($user->id)->adminAdminFlag==1);
- }
- protected function isNormalAdmin($user)//判断是否是普通管理员
- {
- return ($this->loadModel($user->id)->adminAdminFlag==0);
- }
- public function loadModel($id)
- {
- $model=Admin::model()->findByPk((int)$id);
- if($model===null){
- throw new CHttpException(404,'页面不存在');
- }
- return $model;
- }
- }
注:其中$user代表Yii::app()->user即登录用户。
转载于:https://blog.51cto.com/liyongjiang/1147523
Yii的acce***ules用法相关推荐
- php behaviors,YII框架行为behaviors用法详解
YII框架行为behaviors用法示例 本文实例讲述了YII框架行为behaviors用法.分享给大家供大家参考,具体如下: 文件 frontend/libs/FilterTest.php /** ...
- php behaviors,YII框架行为behaviors用法示例
本文实例讲述了YII框架行为behaviors用法.分享给大家供大家参考,具体如下: 文件 frontend/libs/FilterTest.php /** * Created by PhpStorm ...
- php yii框架使用教程,php中yii框架实例用法
Yii2框架在目前而言,网络上好评不断,最主要的原因,不管是新的框架,还是回顾旧的框架,总是有一个无法代替的优点,就是做事快,在性能使用上,也是一般框架无法媲美的,在php最好用的框架评选了,永远都是 ...
- yii mysql函数_Yii框架函数简单用法分析
本文实例讲述了Yii框架函数简单用法.分享给大家供大家参考,具体如下: 1.redict return $this->redirect(['login']); redict其实是对于以下的封装 ...
- yii mysql条件查询_Yii框架where查询用法实例分析
本文实例讲述了Yii框架where查询用法.分享给大家供大家参考,具体如下: 1.简述 Yii的查询操作找使用where用的很多 总结下常用的哈希格式与操作符格式 2.操作符格式 适用于操作符的 [操 ...
- Yii基于角色的访问控制(非Rbac)
今天遇到了权限控制的问题,后台不同级别的用户登录后看到的内容是不一样的.网上查了下,说Yii中有自带的RBAC权限控制,大概看了下,没理解太明白.然后就是采用filter进行过滤验证,看着这个还不错. ...
- yiic.php,PHP框架YII札记之1
当前位置:我的异常网» PHP » PHP框架YII札记之1 PHP框架YII札记之1 www.myexceptions.net 网友分享于:2013-12-26 浏览:10次 PHP框架YII笔 ...
- php aes加密中文,PHP AES加密 - 菜鸟要飞啊的IT小窝 - OSCHINA - 中文开源技术交流社区...
1.aes加密类 namespace app\common; //也可以直接用define定义常量 //define('KEY','12345'); //define('IV','12345'); / ...
- php with语法,Yii框架关联查询with用法分析
本文实例分析了Yii框架关联查询with用法.分享给大家供大家参考.具体方法如下: Yii框架关联查询与mysql中的关联查询会有什么区别呢?这里小编就与各位来一起来看看吧. Yii的关联查询确实是一 ...
最新文章
- linux查看jvm内存被使用情况,Linux系统查看内存使用率
- python 绘制平滑曲线_用python绘制概率图形曲线
- OpenCV_008-OpenCV 中的图像算术运算
- token要加编码decode吗_彻底弄明白Base64 编码
- 图像影音型计算机主板选择什么,电脑主板型号在哪里看? 每日一答
- 解决linux下终端无法输入的假死问题
- AI向程序员老司机学习:从眼神的变化中寻找bug
- Android开源项目推荐之「最好用的Log」
- mysql查询结果进行排名
- c++ primer plus 复合类型之字符串、string、结构体、共用体、指针
- Pareidolia — AI的艺术教学
- Android多开检测的另一个思路
- 使用Safari只要打开echarts图表的网址会使Safari未响应
- 基于maven自动构建和部署工具-JDeploy
- 行业:美团将在快手开放平台上线美团小程序
- 在微软Word中插入代码并保持代码样式
- 华为云 CDN金秋特惠活动,这价可以
- c语言中双冒号意思_详解C++中的双冒号 ::
- 极客大学产品经理训练营:产品经理的职业规划 第20课总结
- MySQL面试:为什么用自增列作为主键