Yii中配置Srbac模块
Srbac 可以在如下地址下载:
Yii 扩展页面: http://www.yiiframework.com/extension/srbac/
要安装 srbac 模块,首先解压压缩文件到Yii应用的模块目录,如果把srbac作为一个模块的话,就要在protected文件夹下新建一个文件夹modules,然后把解压得到的文件夹复制过来。
在配置模块之前,首先我们需要建立一个用户信息的user表,用来存储我们需要权限操作的用户,并生成user表的Model,Model名称与Srbac配置中的'userclass'相同。
然后编辑配置文件如下:
在protected/config/main中
1.首先应该有db的配置:
'db'=>array(
'connectionString' => 'mysql:host=localhost;dbname=test,//请修改为项目的数据库名称
'emulatePrepare' => true,
'username' => 'root',//请修改为项目的数据库用户名
'password' => '',//请修改为项目的数据库密码
'charset' => 'utf8',
'tablePrefix' => 'tbl_',//请修改为项目的数据库表前缀
),
2.配置authManager组件:
在components下添加
//配置authManager,使用Srbac的SDbAuthManager
'authManager'=>array(
'class'=>'application.modules.srbac.components.SDbAuthManager',
//'class'=>'CDbAuthManager',// Manager 的类型
'defaultRoles'=>array('guest'),//默认角色
'itemTable' => 'item',//认证项表名称(可修改)
'itemChildTable' => 'itemchild',//认证项父子关系(可修改)
'assignmentTable' => 'assignment',//认证项赋权关系(可修改)
),
items,assignments,itemchildren三个表的名字可随意改动。表结构请到framework/web/auth/schema-mysql.sql中查看
3.继续添加srbac配置
添加以下配置代码
'srbac' => array(
'userclass'=>'User', //可选,默认是 User
'userid'=>'id', //可选,默认是 userid
'username'=>'username', //可选,默认是 username
'delimeter'=>' ',//模块中添加operation时,插入Srbac之后的字段
'debug'=>true, //可选,默认是 false,只有当debug为false时,模块才能生效
'pageSize'=>10, //可选,默认是 15
'superUser' =>'Admin', //可选,建议将此名称改为超级管理员名称,有利于角色的统一
'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
// 必须是一个存在的路径别名
),
4.导入模块Controller路径:
查看srbac属性列表可以得到每个属性的详细信息
导入 SbaseController(for using the auto checking access feature):
'import'=>array(
'application.modules.srbac.models.*',
'application.modules.srbac.controllers.SBaseController',
),
5.安装完成
你可以访问http://localhost/app/index.php?r=srbac/authitem
进入安装页面后如果有变红的项目,说明你的配置有问题,请修改为正确的配置。然后点击安装。
然后完成安装,显示成功后,你进入项目,找到protected\modules\srbac \views\authitem\install可以把这个文件夹删掉,也可以重命名。然后找到protected\modules\srbac \controllers\AuthitemController.php
注释掉beforeAction方法中的:
//if(!$this->module->isInstalled() && $action->id != "install") {
// $this->redirect(array("install"));
// $this->actionInstall();
// return false;
//}
因为这个地方判断每次都是新安装srbac。当你安装完成后,这里就没用了。可以注释掉了。
再访问链接http://localhost/app/index.php?r=srbac/authitem/authitem
就可以看到管理界面了。
6.项目配置
对于Srbac的基本安装完成之后,我们可以使用其自带的基础权限操作功能,但为使之更加符合我们实际项目的操作要求,我们还需要按照我们的习惯为其修改部分细节以及增加一些功能:
6.1 在我们的components文件夹中的Controller.php中,我们需要将本类的继承关系更改为:
class Controller extends SBaseController
而我们其他的controller则继续继承Controller。
修改完成之后,我们的权限控制功能将由Srbac模块负责。
6.2 在Srbac中,我们将user的id作为判断该用户身份的唯一标识,如果在以前的项目中没有getId的方法,那我们需要在omponents的UserIdentity.php文件中重写getId的方法:
例:
public function getId(){ //重写getId()方法
return $this->id;
}
6.3 接口文件:
RBACUtility.php:
此文件应放入我们的Yii框架的extensions文件夹中,其中包含了我们项目中经常使用的几个与用户权限操作相关的接口。
6.4 数据库中的表:
为实现我们的权限的管理操作,我们在数据库中有三个表来存储我们角色、任务、操作的关系,我们可以根据项目的实际需求来修改或者合并部分数据表,表结构和每张表的作用请参见《Yii权限管理工具Srbac使用小结》。