关于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版本。