当前位置: 首页 > 工具软件 > SRBAC > 使用案例 >

yii之srbac详解

史骏
2023-12-01

一、安装篇

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

     

 

转载于:https://www.cnblogs.com/webclz/p/3914327.html

 类似资料: