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

来源:互联网 发布:找车拉货用什么软件 编辑:程序博客网 时间:2024/05/17 05:59

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, 动作 Viewposts_admin.PostDelete : 模块 posts, 子目录 admin, 控制器 Post, 动作 deleteSiteIndex : 控制器 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

0 0