Yii中利用filters来控制访问
2014-08-05 17:24
351 查看
Yii中利用filters来控制访问
filters()方法定义在CController里,用Gii生成Controller时里面就有filters方法,代码如下:
这个方法没有做什么实质性的动作,它只是把你将要执行的过滤方法方法名或者过滤类的类名返回给CController。 我们先看使用方法的方式,也即上面代码里的’inlineFilterName’含义,这个inlineFilterName意思是在当前控制器的类中有 一个inlineFilterName()方法,该方法里就是你要执行的过滤规则,比如:当前在TestController里:
Ok,上面的代码就是对当前控制器的所有action都执行了检查用户是否登录了操作,如果用户未登录则跳转到登录页,如果登录则继续执行action里的内容。这是利用在当前控制器下写方法的方式执行过滤,同样,写成类也是可以的,引入方式
要是想让特定的方法检查是否登录了,则还是在TestController里:
这样就可以做到对指定的action添加自定义的过滤规则了。
其实,Yii里已经封装好了一个过滤类,这里带大家看看它是怎样实现的,其实原理和上面一模一样。先来看看CController里的public void filterAccessControl(CFilterChain $filterChain) 方法:
可以看到,它是以filter开头的函数,大家知道它是干嘛的了吧?该方法实例化了一个CAccessControlFilter类,该类就是处理过滤规则的,然后把$this->accessRules()作为一个参数付给 $filter->setRules()方法。 下面来看看accessRules()方法的写法:
以上便是YII的filter的过滤规则.
filters()方法定义在CController里,用Gii生成Controller时里面就有filters方法,代码如下:
public function filters() { // return the filter configuration for this controller, e.g.: return array( 'inlineFilterName', array( 'class'=>'path.to.FilterClass', 'propertyName'=>'propertyValue', ), ); }
这个方法没有做什么实质性的动作,它只是把你将要执行的过滤方法方法名或者过滤类的类名返回给CController。 我们先看使用方法的方式,也即上面代码里的’inlineFilterName’含义,这个inlineFilterName意思是在当前控制器的类中有 一个inlineFilterName()方法,该方法里就是你要执行的过滤规则,比如:当前在TestController里:
<?php class TestController extends CController{ //该方法判断用户是否登录 public function filterInlineFilterName($filterChain){ if (Yii::app()->user->isGuest) Yii::app()->user->loginRequired();//封装了登录的url $filterChain->run();//参数$filterChain就是执行该filter的action实例,调用$filterChain->run()其实就是执行该action了。 } public function filters(){ return array('inlineFilterName'); } } ?>
Ok,上面的代码就是对当前控制器的所有action都执行了检查用户是否登录了操作,如果用户未登录则跳转到登录页,如果登录则继续执行action里的内容。这是利用在当前控制器下写方法的方式执行过滤,同样,写成类也是可以的,引入方式
public function filters() { // return the filter configuration for this controller, e.g.: return array( array( 'class'=>'path.to.FilterClass',//类名 'propertyName'=>'propertyValue',//属性名,属性值 ), ); }
要是想让特定的方法检查是否登录了,则还是在TestController里:
<?php class TestController extends CController{ //该方法判断用户是否登录 public function filterInlineFilterName($filterChain){//必须以filter开头,后跟名字 if (Yii::app()->user->isGuest && !in_array($filterChain->action->id,$this->inlineFilterNameAction())) Yii::app()->user->loginRequired();//封装了登录的url $filterChain->run();//参数$filterChain就是执行该filter的action实例,调用$filterChain->run()其实就是执行该action了。 } public function filters(){ return array('inlineFilterName'), } public function inlineFilterNameAction(){//返回要执行过滤的action return array('action1','action2','action3'); } } ?>
这样就可以做到对指定的action添加自定义的过滤规则了。
其实,Yii里已经封装好了一个过滤类,这里带大家看看它是怎样实现的,其实原理和上面一模一样。先来看看CController里的public void filterAccessControl(CFilterChain $filterChain) 方法:
public function filterAccessControl($filterChain) { $filter=new CAccessControlFilter; $filter->setRules($this->accessRules()); $filter->filter($filterChain); }
可以看到,它是以filter开头的函数,大家知道它是干嘛的了吧?该方法实例化了一个CAccessControlFilter类,该类就是处理过滤规则的,然后把$this->accessRules()作为一个参数付给 $filter->setRules()方法。 下面来看看accessRules()方法的写法:
public function accessRules() { return array( 'allow', // or 'deny' //可选规则,本规则适用于列出的所有动作ID(不区分大小写) //如果未指定此项,则规则适用于所有动作。 'actions' => array('edit', 'delete'), //可选规则,本规则适用于列出的所有控制器ID(不区分大小写) 'controllers' => array('post', 'admin/user'), //可选规则,本规则适用于列出的所有用户ID(不区分大小写) //使用*号表示所有用户,?号表示来宾用户,@表示通过身份验证的用户。 'users' => array('thomas', 'kevin'), //可选规则,本规则适用于列出的所有角色(区分大小写)。 'roles' => array('admin', 'editor'), //可选规则,本规则适用于列出的所有IP地址。 //如127.0.0.1, 127.0.0.* 'ips' => array('127.0.0.1'), //可选规则,本规则适用于列出的所有请求类型(区分大小写)。 'verbs' => array('GET', 'POST'), //可选规则,一个PHP表达式,其值表示此规则是否适用 'expression' => '!$user->isGuest && $user->level==2', //可选规则,显示自定义的错误消息 //自1.1.1版后,此选项开始使用。 'message' => 'Access Denied.', ); }
以上便是YII的filter的过滤规则.
相关文章推荐
- Yii中利用filters来控制访问
- Yii中利用filters/accesRules来控制访问
- Yii中利用filters来控制访问
- Yii中利用filters来控制访问
- YII 访问控制过了filters
- YII framework下基于角色的访问控制(RBAC),权限设置 yii下,filters()和accessControl()是YII基本的访问控制体系, public function filt
- AXIS2访问权限控制利用TOMCAT用户
- apache利用.htaccess控制客户端访问
- 【转】Subversion之路----利用 svnserve.exe 实现精细的目录访问控制(v1.0)
- 利用 AOP 实现 .NET 上完整的基于角色的访问控制(RBAC)模型
- 利用 AOP 实现 .NET 上完整的基于角色的访问控制(RBAC)模型
- yii基于角色的访问控制(Role-Based Access Control)
- js 小技巧之利用匿名函数控制方法访问权限
- 利用 AOP 实现 .NET 上完整的基于角色的访问控制(RBAC)模型
- Yii-控制器- accessRules访问权限控制
- yii 权限分级式访问控制的实现(非RBAC法)
- 利用Windows2003 IP安全策略实现服务器远程桌面端口(3389)访问控制
- 利用 AOP 实现 .NET 上完整的基于角色的访问控制(RBAC)模型
- 利用 AOP 实现 .NET 上完整的基于角色的访问控制(RBAC)模型
- 利用 AOP 实现 .NET 上完整的基于角色的访问控制(RBAC)模型