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 是一个为 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