YII框架使用SRBAC实现RBAC权限访问控制

YII框架使用SRBAC实现RBAC权限访问控制


1. 下载

可访问以下网址下载: http://www.yiiframework.com/extension/srbac/

或使用附件中的压缩包

2. 安装

首先安装YII. (具体步骤略)

在protected文件夹下创建文件夹modules

解压#1下载的压缩包, 并将srbac拷贝至modules文件夹下

配置main.php如下(红色部分):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
'import' => array (
         'application.models.*' ,
         'application.components.*' ,
         'application.modules.srbac.controllers.SBaseController' ,
     ),
     'modules' => array (
         // uncomment the following to enable the Gii tool
         /*
         'gii'=>array(
             'class'=>'system.gii.GiiModule',
             'password'=>'Enter Your Password Here',
              // If removed, Gii defaults to localhost only. Edit carefully to taste.
             'ipFilters'=>array('127.0.0.1','::1'),
         ),
         */
         'srbac' => array (
                'userclass' => 'Admin' , //根据实际用户model类设置
                'userid' => 'id' ,
                'username' => 'username' ,
                // 如果设置为true, 则会跳过权限控制
                'debug' =>false,
                'pageSize' =>10,
                'superUser' => 'Authority' ,
                'css' => 'srbac.css' ,
                'layout' => 'application.views.layouts.main' ,
                'notAuthorizedView' => 'srbac.views.authitem.unauthorized' ,
                'alwaysAllowed' => array ( 'SiteLogin' , 'SiteLogout' , 'SiteIndex' , 'SiteAdmin' 'SiteError' 'SiteContact' ),
                'userActions' => array ( 'show' , 'View' , 'List' ),
                'listBoxNumberOfLines' =>15,
                'imagesPath' => 'srbac.images' ,
                'imagesPack' => 'noia' ,
                'iconText' =>true,
                'header' => 'srbac.views.authitem.header' ,
                'footer' => 'srbac.views.authitem.footer' ,
                'showHeader' =>true,
                'showFooter' =>true,
                'alwaysAllowedPath' => 'srbac.components' ,
            ),
     ),
   
     // application components
     'components' => array (
         'authManager' => array (
             'class' => 'application.modules.srbac.components.SDbAuthManager' ,
             'connectionID' => 'db' ,
             'itemTable' => 'items' ,
             'assignmentTable' => 'assignments' ,
             'itemChildTable' => 'itemchildren' ,
         ),

修改protected/components/Controller.php, 使其继承SBaseController. 如果不继承此类, 所有的controller将无法使用RBAC进行访问控制

class Controller extends SBaseController

访问http://127.0.0.1/index.php?r=srbac, 界面提示安装

点击安装后确定.

相关文档


Srbac 1.1.0.2 使用手册什么是srbac?

Srbac 是一个为 Yii 框架设计的模块。

它设计用来简化 Yii authManager 组件的使用,authManager 组件实现基于角色的访问控制(R.B.A.C)。

srbac 支持的 authManager 是 CdbAuthManger , CdbAuthManger 使用一个数据库来存储认证信息。 Srbac 为大多数 RBAC 动作(创建/编辑/删除 认证项目,为用户分配认证项目等)提供了一个图形界面。

Srbac 1.1.x 需要 Yii 版本 1.1.0 或更新的版本。

下载 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应用的模块目录,然后编辑配置文件如下:

配置数据库组件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SQLite:
   
'db' => array (
    'class' => 'CDbConnection' ,
    'connectionString' => 'sqlite:path/to/database/yourDatabase.db' ,
),
MySQL:
   
'db' => array (
    'class' => 'CDbConnection' ,
    'connectionString' => 'mysql:host=localhost;dbname=yourDatabase' ,
    'username' => 'yourUsername' ,
    'password' => 'yourPassword' ,
),

配置authManager组件:

1
2
3
4
5
6
7
'authManager' => array (
             'class' => 'CDbAuthManager' , // Manager 的类型
             'connectionID' => 'db' , //使用的数据库组件
             'itemTable' => 'items' , // 授权项目表 (默认:authitem)
             'assignmentTable' => 'assignments' , // 授权分配表 (默认:authassignment)
             'itemChildTable' => 'itemchildren' , // 授权子项目表 (默认:authitemchild)
),
配置srbac 模块:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
'srbac'  =>  array (
   'userclass' => 'User' //可选,默认是 User
   'userid' => 'user_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 ' // 可选,默认是
                     //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属性列表可以得到每个属性的详细信息。

导入 SbaseController(for using the auto checking access feature):

1
2
3
'import' => array (
     'application.modules.srbac.controllers.SBaseController' ,
),

现在访问 /path/to/application/index.php?r=srbac 你将转向到安装页面。

一个检查被执行,若一切OK,你可以开始安装(也可以选择创建一些演示用的授权项目)。

若 srbac 已经被安装,将提示你覆盖之前的安装(这将丢弃所有的表并删除你当前的授权数据)。

一个 'Authorizer' 角色将被创建。(你可以在 srbac 配置中修改它的名字)。这是唯一可以管理 srbac 的用户(创建,编辑,删除角色,人物,操作以及为用户分配权限)。

注意,除非你设置 srbac debug 属性为 false ,否则任何人均可以管理 srbac, 同时,除非你分配 Authorizer 角色到至少一个用户,否则任何人均可以管理srbac。

在分配 Authorizer 角色到一个用户后,设置 srbac debug 属性为false 是明智的。同时你也可以删除或重命名 srbac/views/authitem/install 目录。

srbac 主要的管理页面是:path/to/application/index.php?r=srbac/authitem/frontpage。

自动创建和访问检查(Autocreation and access checking)

自版本 1.02 开始,你可以为你的控制器自动创建 操作/任务。 操作的命名格式是:[ModuleId_][Subdirectory.][ContollerId][Action]。例如:

posts_PostView : 模块 posts , 控制器 Post, 动作 View
posts_admin.PostDelete : 模块 posts, 子目录 admin, 控制器 Post, 动作 delete
SiteIndex : 控制器 Site , 动作 Index.

你也可以创建 2 个任务,格式是 [ControllerId]Viewing, [ControllerId]Administrating (例如PostViewing, PostAdministrating).

所有操作被分配到 administrating 任务,通过在 srbac 配置中编辑 userActions 属性,你可以选择哪些操作被分配到viewing 任务。

若你也想要 srbac 在控制器中自动检查访问权限,你的控制器应当扩展 srbac 模块中的 SBaseController 类或其子类。

SbaseController 重写 beforeAction($action) 方法并检查当前用户是否有权限访问当前的 controller/action。

要决定一个用户没有权限访问页面后的要做的事情,你可以重写 SBaseController 中的 onUnauthorizedAccess 方法。 这样你可以显示一个未授权信息页面,转向到登录页面等。

国际化

若你想要翻译 srbac 文本,你应当在 Yii 配置文件中设置目标语言:'language'=>'fr',

然后创建如下包含翻译信息的文件:
srbac/messages/fr/srbac.php (你可以复制 el_gr/srbac.php 并翻译其中的信息)。
srbac/views/install/fr/installText.php (你应当翻译 srbac/views/install/installText.php)


转载:http://hi.baidu.com/begin/item/bdeda03e777316ee1b96968f

你可能感兴趣的:(YII框架使用SRBAC实现RBAC权限访问控制)