Yii Srbac 非常简单方便的权限控制方法
2012-11-15 15:04
387 查看
在开发一个有多种用户的网络应用时,对权限的判断总是一个很麻烦的事情。
Yii支持RBAC(Role-Based Access Control),结合filter,就给我们提供了非常简单方便的权限控制方法。
其实RBAC的原理很简单。
先梳理一下默认的Yii的授权filter:accessControl。它是根据accessRules按照用户的身份(users)来验证并授权的,默认的有*(任何用户),@(通过登录验证的用户),admin(管理员)。通过一系列这些accessRules,指定了这三种身份用户的各自可调用的action的权限。
而RBAC和默认的按照users的原理一样。通过指定”roles”来限定对应角色用户的可用action的权限。用”roles”替换”users”即可,因为Yii的accessControl是支持roles的。通过这种方式,在Contoller内部,通过指定accessRules就可以控制权限。在其他地方,比如控制一些view的显示的时候,可以用Yii::app()->user->checkAccess(role)来进行权限判断。
下面是安装的方法:
Yii 扩展页面: http://www.yiiframework.com/extension/srbac/
Google 项目页面: http://code.google.com/p/srbac/downloads/list
也可以使用如下命令签出最新的开发代码:
然后编辑配置文件如下:
在protected/config/main中
首先应该有db的配置:
//srbac作为一个模块,所以要声明一下才能使用。
查看srbac属性列表可以得到每个属性的详细信息。
导入 SbaseController(for using the auto checking access feature):
'import'=>array(
'application.modules.srbac.controllers.SBaseController',
),
这样就配置完了。接着你可以访问http://localhost/app/index.php?r=srbac/authitem
进入安装页面后如果有变红的项目,说明你的配置有问题,请修改为正确的配置。然后点击安装。
然后完成安装,显示成功后,你进入项目,找到protected\modules\srbac\views\authitem\install可以把这个文件夹删掉,也可以重命名。然后找到protected\modules\srbac\controllers\AuthitemController.php
修改
protected function beforeAction($action) {
//if(!$this->module->isInstalled() && $action->id != "install") {
// $this->redirect(array("install"));
// $this->actionInstall();
// return false;
//}
if($this->module->debug) {
return true;
}
if( Yii::app()->user->checkAccess(Helper::findModule('srbac')->superUser) ||
!Helper::isAuthorizer()) {
return true;
} else {
parent::beforeAction($action);
}
}
因为这个地方判断每次都是新安装srbac。当你安装完成后,这里就没用了。可以注释掉了。
再访问链接http://localhost/app/index.php?r=srbac/authitem/authitem
就可以看到管理界面了。
使用方法:
1、主要还是姓名(name)建立好,例如:admin@articleIndex(admin是module,article是controller,Index是action)。规则就是一个业务判断语句,例如:
2、controller直接继承SbaseController就可以自动调用了。
汉化:
1、修改中文化语言文件(srbac/message/zh_cn/srbac.php,其中默认的zh修改为zh_cn),添加数组:"TYPES"=>array("操作","任务","角色"),
2、修改AuthItem模型中的$TYPES,默认是一个英文数组,改为public static
$TYPES ;
3、为AuthItem模型添加getTYPES()方法;
4、重写构造函数,如下:
Yii支持RBAC(Role-Based Access Control),结合filter,就给我们提供了非常简单方便的权限控制方法。
其实RBAC的原理很简单。
先梳理一下默认的Yii的授权filter:accessControl。它是根据accessRules按照用户的身份(users)来验证并授权的,默认的有*(任何用户),@(通过登录验证的用户),admin(管理员)。通过一系列这些accessRules,指定了这三种身份用户的各自可调用的action的权限。
而RBAC和默认的按照users的原理一样。通过指定”roles”来限定对应角色用户的可用action的权限。用”roles”替换”users”即可,因为Yii的accessControl是支持roles的。通过这种方式,在Contoller内部,通过指定accessRules就可以控制权限。在其他地方,比如控制一些view的显示的时候,可以用Yii::app()->user->checkAccess(role)来进行权限判断。
下面是安装的方法:
下载 srbac
Srbac 可以在如下地址下载:Yii 扩展页面: http://www.yiiframework.com/extension/srbac/
Google 项目页面: http://code.google.com/p/srbac/downloads/list
也可以使用如下命令签出最新的开发代码:
svn checkout http://srbac.googlecode.com/svn/trunk/ srbac-read-only
安装 srbac
要安装 srbac 模块,首先解压压缩文件到Yii应用的模块目录,如果把srbac作为一个模块的话,就要在protected文件夹下新建一个文件夹modules,然后把解压得到的文件夹复制过来。然后编辑配置文件如下:
在protected/config/main中
首先应该有db的配置:
'db'=>array( 'connectionString' => 'mysql:host=localhost;dbname=blog', 'emulatePrepare' => true, 'username' => 'root', 'password' => 'guohao', 'charset' => 'utf8', 'tablePrefix' => 'tbl_', ), 配置authManager组件: 'authManager'=>array( 'class'=>'CDbAuthManager',// Manager 的类型 'connectionID'=>'db',//使用的数据库组件 'itemTable'=>'items',// 授权项目表 (默认:authitem) 'assignmentTable'=>'assignments',// 授权分配表 (默认:authassignment) 'itemChildTable'=>'itemchildren',// 授权子项目表 (默认:authitemchild) ), items,assignments,itemchildren三个表的名字可随意改动。表结构请到framework/web/auth/schema.sql 'modules'=>array( 'srbac' => array( 'userclass'=>'User', //可选,默认是 User 'userid'=>'id', //可选,默认是 userid 'username'=>'username', //可选,默认是 username 'debug'=>true, //可选,默认是 false 'pageSize'=>10, //可选,默认是 15 'superUser' =>'Authority', //可选,默认是 Authorizer 'css'=>'srbac.css', //可选,默认是 srbac.css 'layout'=> 'application.views.layouts.main', //可选,默认是 // application.views.layouts.main, 必须是一个存在的路径别名 'notAuthorizedView'=> 'srbac.views.authitem.unauthorized', // 可选,默认是unauthorized.php //srbac.views.authitem.unauthorized, 必须是一个存在的路径别名 'alwaysAllowed'=>array( //可选,默认是 gui 'SiteLogin','SiteLogout','SiteIndex','SiteAdmin', 'SiteError', 'SiteContact'), 'userActions'=>array(//可选,默认是空数组 'Show','View','List'), 'listBoxNumberOfLines' => 15, //可选,默认是10 'imagesPath' => 'srbac.images', //可选,默认是 srbac.images 'imagesPack'=>'noia', //可选,默认是 noia 'iconText'=>true, //可选,默认是 false 'header'=>'srbac.views.authitem.header', //可选,默认是 // srbac.views.authitem.header, 必须是一个存在的路径别名 'footer'=>'srbac.views.authitem.footer', //可选,默认是 // srbac.views.authitem.footer, 必须是一个存在的路径别名 'showHeader'=>true, //可选,默认是false 'showFooter'=>true, //可选,默认是false 'alwaysAllowedPath'=>'srbac.components', //可选,默认是 srbac.components // 必须是一个存在的路径别名 ), ),
//srbac作为一个模块,所以要声明一下才能使用。
查看srbac属性列表可以得到每个属性的详细信息。
导入 SbaseController(for using the auto checking access feature):
'import'=>array(
'application.modules.srbac.controllers.SBaseController',
),
这样就配置完了。接着你可以访问http://localhost/app/index.php?r=srbac/authitem
进入安装页面后如果有变红的项目,说明你的配置有问题,请修改为正确的配置。然后点击安装。
然后完成安装,显示成功后,你进入项目,找到protected\modules\srbac\views\authitem\install可以把这个文件夹删掉,也可以重命名。然后找到protected\modules\srbac\controllers\AuthitemController.php
修改
protected function beforeAction($action) {
//if(!$this->module->isInstalled() && $action->id != "install") {
// $this->redirect(array("install"));
// $this->actionInstall();
// return false;
//}
if($this->module->debug) {
return true;
}
if( Yii::app()->user->checkAccess(Helper::findModule('srbac')->superUser) ||
!Helper::isAuthorizer()) {
return true;
} else {
parent::beforeAction($action);
}
}
因为这个地方判断每次都是新安装srbac。当你安装完成后,这里就没用了。可以注释掉了。
再访问链接http://localhost/app/index.php?r=srbac/authitem/authitem
就可以看到管理界面了。
使用方法:
1、主要还是姓名(name)建立好,例如:admin@articleIndex(admin是module,article是controller,Index是action)。规则就是一个业务判断语句,例如:
$bizRule='return Yii::app()->user->id==$params["post"]->authID;';
2、controller直接继承SbaseController就可以自动调用了。
汉化:
1、修改中文化语言文件(srbac/message/zh_cn/srbac.php,其中默认的zh修改为zh_cn),添加数组:"TYPES"=>array("操作","任务","角色"),
2、修改AuthItem模型中的$TYPES,默认是一个英文数组,改为public static
$TYPES ;
3、为AuthItem模型添加getTYPES()方法;
public function getTYPES(){ self::$TYPES = Helper::translate('srbac','TYPES'); }
4、重写构造函数,如下:
public function __construct($scenario = 'insert') { parent::__construct($scenario); $this->getTYPES(); }
相关文章推荐
- 一种简单方便的权限管理方法--使用菜单
- B/S系统权限控制的一种简单方法
- 一种简单方便的用户权限管理方法--使用菜单来管理用户权限
- 一种简单方便的用户权限管理方法--使用菜单来管理用户权限(下)
- B/S系统权限控制的一种简单方法
- 一种简单方便的用户权限管理方法--使用菜单来管理用户
- B/S系统权限控制的一种简单方法
- 一个非常简单的菜单栏折叠控制方法
- 自已设计的权限控制,现在看来要扩展功能非常的方便,自已赞自已一个
- B/S系统权限控制的一种简单方法
- 非常简单方便的导出Excel的方法
- Delphi 一种简单的二进制校验方法,适用于简单的权限管理或开关控制
- 一种简单方便的权限控制方案
- B/S系统权限控制的一种简单方法(转)
- 非常简单的图片转换成PDF方法
- elasticsearch使用jetty进行简单的权限控制
- spring aop 拦截业务方法,实现权限控制
- javaWeb用户权限控制简单实现
- 无需繁琐的解析XML,cocos2d-x 3.x中最简单方便粗暴有效的数据方法-plist
- Num53 boss---07(shiro应用&方法注解权限&页面标签权限&shiro权限控制总结)