yii之srbac详解

一、安装篇

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中是分了四层:操作、任务、角色、用户。

     

 

你可能感兴趣的:(rbac)