一、安装篇
1、下载http://www.yiiframework.com/extension/srbac/ 将解压得到的srbac文件夹放在moudles目录下。
2、在项目的主配置文件中mai.php:
'modules'=>array( // uncomment the following to enable the Gii tool 'gii'=>array( 'class'=>'system.gii.GiiModule', 'password'=>'123123', // If removed, Gii defaults to localhost only. Edit carefully to taste. 'ipFilters'=>array('127.0.0.1','::1'), ), 'srbac' => array( 'userclass'=>'User', //default: User 'userid'=>'userid', //default: userid 'username'=>'username', //default:username 'delimeter'=>'@', //default:- 'debug'=>false, //default :false 'pageSize'=>10, // default : 15 'superUser' =>'Authority', //default: Authorizer 'css'=>'srbac.css', //default: srbac.css 'layout'=> 'application.views.layouts.main', //default: application.views.layouts.main, //must be an existing alias 'notAuthorizedView'=> 'srbac.views.authitem.unauthorized', // default: //srbac.views.authitem.unauthorized, must be an existing alias 'alwaysAllowed'=>array( //default: array() 'SiteLogin','SiteLogout','SiteIndex','SiteAdmin', 'SiteError', 'SiteContact','UserIndex'), 'userActions'=>array('Show','View','List'), //default: array() 'listBoxNumberOfLines' => 15, //default : 10 'imagesPath' => 'srbac.images', // default: srbac.images 'imagesPack'=>'noia', //default: noia 'iconText'=>true, // default : false 'header'=>'srbac.views.authitem.header', //default : srbac.views.authitem.header, //must be an existing alias 'footer'=>'srbac.views.authitem.footer', //default: srbac.views.authitem.footer, //must be an existing alias 'showHeader'=>true, // default: false 'showFooter'=>true, // default: false 'alwaysAllowedPath'=>'srbac.components', // default: srbac.components // must be an existing alias ) ), ),
'import'=>array( 'application.models.*', 'application.components.*', 'application.modules.srbac.controllers.SBaseController', ),
'components'=>array( 'user'=>array( // enable cookie-based authentication 'allowAutoLogin'=>true, ), 'authManager' => array( 'class'=>'srbac.components.SDbAuthManager', // The database component used 'connectionID'=>'db', // The itemTable name (default:authitem) 'itemTable'=>'authitem', // The assignmentTable name (default:authassignment) 'assignmentTable'=>'authassignment', // The itemChildTable name (default:authitemchild) 'itemChildTable'=>'authitemchild', ), // uncomment the following to use a MySQL database 'db'=>array( 'connectionString' => 'mysql:host=localhost;dbname=demo4', 'emulatePrepare' => true, 'username' => 'root', 'password' => 'root', 'charset' => 'utf8', ),
配置完毕,还需要一个User模型,至少含有userid,username两个选项,与上面的配置文件中保持一致。用gii工具生成User模型。通过域名/index.php/srbac进行访问进入安装界面,以上选项都具备时,安装成功。
二、使用篇
1、使用之前的几个小问题。
(1)界面中文化
将srbac/message下的zh文件夹复制一份为zh_cn,在main.php中添加配置选项'language'=>'zh_cn'即可。
(2)自动检测,如果没有自动检测,在需要调用权限的检查的方法时候都要进行添加代码的检测,如Yii::app()->user->checkAccess('createPost'),满足了才继续向下执行。开启自动检测需要下面两个条件:
将配置文件中的 'debug'选项设置为false,如上所示;
然后将components组件中的Controller.php中的:
class Controller extends CController
改为:
class Controller extends SBaseController
这样就会自动进行检测了。并且只有继承了SBaseController,才能在界面中使用自动生成opreation和task的功能。
(3)设置只有超级管理员才可以访问Srbac,安装完成后默认的都可以访问。
在配置文件中有这个选项:'superUser' =>'Authority', 这个Authority就是一个管理srbac的唯一的一个角色,只要将这个角色分配给一个特定的用户,那么就只有这个用户可以访问srbac了。
(4) 明确这个srbac只是一个工具,更方便的来实现rbac,用yii单纯的代码一样可以完成工作。比如在配置好了上面的选项以后,如果用代码生成规则如下:
$auth=Yii::app()->authManager; $auth->createOperation('createPost','create a post'); $auth->createOperation('readPost','read a post'); $auth->createOperation('updatePost','update a post'); $auth->createOperation('deletePost','delete a post'); $bizRule='return Yii::app()->user->id==$params["post"]->authID;'; $task=$auth->createTask('updateOwnPost','update a post by author himself',$bizRule); $task->addChild('updatePost');
这些数据将会写入数据表中,并且在这个Srbac也可以读到这些数据。
2、srbac中是分了四层:操作、任务、角色、用户。