在yii中使用Filter实现RBAC权限自动判断

关于RBAC的使用,我曾经写过一篇文章Yii中使用RBAC完全指南,里面详细介绍了RBAC的部分概念和在Yii中的使用方法。

在具体的权限判断的时候,使用了user组件的checkAccess方法。但是在使用的时候发现,虽然这个方法是很方便的,但是总不能在每个Action里面都写上权限判断吧,那么每个Action中都会出现以下的代码:

if(Yii::app()->user->checkAccess(‘admin’))
{
//验证通过,进行操作
}else{
//验证不通过,进行登录或者抛出错误页面

重复这样的步骤很是令人崩溃。其实,在日常使用的时候经常是对于Action级别进行权限判断。在Yii中早已准备好了现成的代码:

<?php
class XXXController extends CController
{

public function filters()
{
return array(‘accessControl’);
}

public function accessRules()
{
return array(

array(‘allow’, ‘roles’=>array(‘admin’, ‘editor’)));
}

accessControl是一个过滤器,会在controller执行的时候进行权限判断。权限规则写在accessRules里面。上面的代码就对所有Action只允许有admin和editor角色的用户访问。

进一步书写accessRules,你可以精确控制所有的权限。从IP到用户名再到角色,不同的Action进行不同的权限判断,都可以在规则里面写出来。

关于这个规则的具体写法,官方的指南里面有写,具体位置在:Special Topics => Authentication and Authorization。中文版在:http://www.yiiframework.com/doc/guide/zh_cn/topics.auth

下载地址:
1.0.x版本 Documentation: .tar.gz, .zip
1.1.x版本 Documentation: .tar.gz, .zip

现在1.1.x版本已经稳定,建议大家使用1.1版本。

转自 http://dongbeta.com/view/544.html



发表评论

您的电子邮箱地址不会被公开。

81 + = 87