访问控制过滤器(Access Control Filter)

访 问控制过滤器是检查当前用户是否能执行访问的controller action的初步授权模式。这种授权模式基于用户名,客户IP地址和访问类型。访问控制过滤器适用于简单的验证。需要复杂的访问控制,需要使用将要讲解 到的基于角色访问控制(role-based access (RBAC)).
在控制器(controller)里重载CController::filters方法设置访问过滤器来控制访问动作(看 Filter 了解更多过滤器设置信息)。

  1. class PostController extends CController
  2. {
  3. ......
  4. public function filters()
  5. {
  6. return array(
  7. 'accessControl',
  8. );
  9. }
  10. }

在上面,设置的access control过滤器将应用于PostController里每个动作。过滤器具体的授权规则通过重载控制器的CController::acce***ules方法来指定。

  1. class PostController extends CController
  2. {
  3. ......
  4. public function acce***ules()
  5. {
  6. return array(
  7. array('deny',
  8. 'actions'=>array('create', 'edit'),
  9. 'users'=>array('?'),
  10. ),
  11. array('allow',
  12. 'actions'=>array('delete'),
  13. 'roles'=>array('admin'),
  14. ),
  15. array('deny',
  16. 'actions'=>array('delete'),
  17. 'users'=>array('*'),
  18. ),
  19. );
  20. }
  21. }

上 面设定了三个规则,每个用个数组表示。数组的第一个元素不是'allow'就是'deny',其他的是名-值成对形式设置规则参数的。上面的规则这样理 解:create和edit动作不能被匿名执行;delete动作可以被admin角色的用户执行;delete动作不能被任何人执行。
访问规则是一个一个按照设定的顺序一个一个来执行判断的。和当前判断模式(例如:用户名、角色、客户端IP、地址)相匹配的第一条规则决定授权的结果。如果这个规则是allow,则动作可执行;如果是deny,不能执行;如果没有规则匹配,动作可以执行。
 
为了确保某类动作在没允许情况下不被执行,设置一个匹配所有人的deny规则在最后,类似如下:

  1. return array(
  2. // ... 别的规则...
  3. // 以下匹配所有人规则拒绝'delete'动作
  4. array('deny',
  5. 'action'=>'delete',
  6. ),
  7. );

因为如果没有设置规则匹配动作,动作缺省会被执行。
访问规则通过如下的上下文参数设置:
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的具体用法:

  1. class AdminController extends CController
  2. {
  3. ……
  4. public function acce***ules()
  5. {
  6. return array(
  7. array('allow',  //允许所有人执行'login','error','index'
  8. 'actions'=>array('login','error','index'),
  9. 'users'=>array('*'),
  10. ),
  11. array('allow', //允许超级管理员执行所有动作
  12. 'actions'=>array('create','update','delete'),
  13. 'expression'=>array($this,'isSuperAdmin'),
  14. ),
  15. array('allow',//允许普通管理员执行
  16. 'actions'=>array('update'),
  17. 'expression'=>array($this,'isNormalAdmin'),    //表示调用$this(即AdminController)中的isNormalAdmin方法。
  18. ),
  19. array('deny',  // deny all users
  20. 'users'=>array('*'),
  21. ),
  22. );
  23. }
  24. protected function isSuperAdmin($user)//判断是否是超级管理员
  25. {
  26. return ($this->loadModel($user->id)->adminAdminFlag==1);
  27. }
  28. protected function isNormalAdmin($user)//判断是否是普通管理员
  29. {
  30. return ($this->loadModel($user->id)->adminAdminFlag==0);
  31. }
  32. public function loadModel($id)
  33. {
  34. $model=Admin::model()->findByPk((int)$id);
  35. if($model===null){
  36. throw new CHttpException(404,'页面不存在');
  37. }
  38. return $model;
  39. }
  40. }

注:其中$user代表Yii::app()->user即登录用户。

转载于:https://blog.51cto.com/liyongjiang/1147523

Yii的acce***ules用法相关推荐

  1. php behaviors,YII框架行为behaviors用法详解

    YII框架行为behaviors用法示例 本文实例讲述了YII框架行为behaviors用法.分享给大家供大家参考,具体如下: 文件 frontend/libs/FilterTest.php /** ...

  2. php behaviors,YII框架行为behaviors用法示例

    本文实例讲述了YII框架行为behaviors用法.分享给大家供大家参考,具体如下: 文件 frontend/libs/FilterTest.php /** * Created by PhpStorm ...

  3. php yii框架使用教程,php中yii框架实例用法

    Yii2框架在目前而言,网络上好评不断,最主要的原因,不管是新的框架,还是回顾旧的框架,总是有一个无法代替的优点,就是做事快,在性能使用上,也是一般框架无法媲美的,在php最好用的框架评选了,永远都是 ...

  4. yii mysql函数_Yii框架函数简单用法分析

    本文实例讲述了Yii框架函数简单用法.分享给大家供大家参考,具体如下: 1.redict return $this->redirect(['login']); redict其实是对于以下的封装  ...

  5. yii mysql条件查询_Yii框架where查询用法实例分析

    本文实例讲述了Yii框架where查询用法.分享给大家供大家参考,具体如下: 1.简述 Yii的查询操作找使用where用的很多 总结下常用的哈希格式与操作符格式 2.操作符格式 适用于操作符的 [操 ...

  6. Yii基于角色的访问控制(非Rbac)

    今天遇到了权限控制的问题,后台不同级别的用户登录后看到的内容是不一样的.网上查了下,说Yii中有自带的RBAC权限控制,大概看了下,没理解太明白.然后就是采用filter进行过滤验证,看着这个还不错. ...

  7. yiic.php,PHP框架YII札记之1

    当前位置:我的异常网» PHP » PHP框架YII札记之1 PHP框架YII札记之1 www.myexceptions.net  网友分享于:2013-12-26  浏览:10次 PHP框架YII笔 ...

  8. php aes加密中文,PHP AES加密 - 菜鸟要飞啊的IT小窝 - OSCHINA - 中文开源技术交流社区...

    1.aes加密类 namespace app\common; //也可以直接用define定义常量 //define('KEY','12345'); //define('IV','12345'); / ...

  9. php with语法,Yii框架关联查询with用法分析

    本文实例分析了Yii框架关联查询with用法.分享给大家供大家参考.具体方法如下: Yii框架关联查询与mysql中的关联查询会有什么区别呢?这里小编就与各位来一起来看看吧. Yii的关联查询确实是一 ...

最新文章

  1. linux查看jvm内存被使用情况,Linux系统查看内存使用率
  2. python 绘制平滑曲线_用python绘制概率图形曲线
  3. OpenCV_008-OpenCV 中的图像算术运算
  4. token要加编码decode吗_彻底弄明白Base64 编码
  5. 图像影音型计算机主板选择什么,电脑主板型号在哪里看? 每日一答
  6. 解决linux下终端无法输入的假死问题
  7. AI向程序员老司机学习:从眼神的变化中寻找bug
  8. Android开源项目推荐之「最好用的Log」
  9. mysql查询结果进行排名
  10. c++ primer plus 复合类型之字符串、string、结构体、共用体、指针
  11. Pareidolia — AI的艺术教学
  12. Android多开检测的另一个思路
  13. 使用Safari只要打开echarts图表的网址会使Safari未响应
  14. 基于maven自动构建和部署工具-JDeploy
  15. 行业:美团将在快手开放平台上线美团小程序
  16. 在微软Word中插入代码并保持代码样式
  17. 华为云 CDN金秋特惠活动,这价可以
  18. c语言中双冒号意思_详解C++中的双冒号 ::
  19. 极客大学产品经理训练营:产品经理的职业规划 第20课总结
  20. MySQL面试:为什么用自增列作为主键

热门文章

  1. 盲盒小程序源码最新版UI
  2. python的分支和循环
  3. 钉钉机器人关键词应答_Python结合钉钉实时自动监控股票行情,上班炒股再也不怕老板发现...
  4. 用计算机语言说一局情话,适合下雨天说的甜蜜情话语录(精选50句)
  5. 可爱卡通幼儿英语课件PPT模板-优页文档
  6. 安装系统之七 U盘装原版WIN7教程
  7. leaflet 图层的建立
  8. 如何使用flyway
  9. 汽车Vin码识别技术应用与研发原理
  10. 降噪效果给力的AirPods Pro真香,包邮送一个