写在前面
* 我的feed地址已经修改为: http://feeds.imdong.net ,请更新您的阅读器。
* 以下内容适合Yii 1.0.x,其他版本可能有略微的差别。
* 根据您的评论和反馈,本文会不断进行修改和补充,以方便新学习者。
开始准备
Yii提供了强大的配置机制和很多现成的类库。在Yii中使用RBAC是很简单的,完全不需要再写RBAC代码。所以准备工作就是,打开编辑器,跟我来。
设置参数、建立数据库
在配置数组中,增加以下内容:
代码如下:
‘components‘ => array(
//……
‘authManager‘=>array(
‘class‘=>‘CDbAuthManager‘,//认证类名称
‘defaultRoles‘=>array(‘guest‘),//默认角色
‘itemTable‘ => ‘pre_auth_item‘,//认证项表名称
‘itemChildTable‘ => ‘pre_auth_item_child‘,//认证项父子关系
‘assignmentTable‘ => ‘pre_auth_assignment‘,//认证项赋权关系
),
//……
那这三个数据表怎么建立呢?很简单,去看framework/web/auth/schema.sql。注意要和你的自定义的表名称对应起来。比如SQL文件中的AuthItem你要修改为pre_auth_item。然后在数据库中运行这个SQL文件中的语句。
了解概念
你可能要问,剩下的代码呢?我告诉你,没有啦。RBAC系统就这样建立起来了。但是为了使用它,你需要了解它的运行机制。我会尽量讲的啰嗦一点……(官方的RBAC文档在这里,但是我曾经看了4-5遍才明白。)
三个概念
你需要了解的是,授权项目可分为operations(行动),tasks(任务)和 roles(角色)。
一个用户拥有一个或者多个角色,比如,我们这里有三个角色:银行行长、银行职员、顾客。我们假设:
* 张行长 有角色:银行行长、银行职员、顾客(人家自己可以存钱嘛)。
* 王职员 有角色:银行职员、顾客。
* 小李 有角色:顾客。
那么,相应的,只要顾客可以做的事情,小李就可以做,王职员和张行长也可以。银行职员可以做的事情,王职员和张行长都可以做,小李就不可以了。
比如,一个“顾客”可以存钱,那么拥有“顾客”角色的张行长、王职员、小李都可以存钱。“银行职员”可以打印顾客的交易记录,那么有“银行职员”角色的张行长和王职员都可以,而小李不行,必须找一个有“银行职员”角色的人才可以打印详细的交易记录。一个“银行行长”才可以进入银行钱库提钱,那么只有张行长可以,因为它才有“银行行长”的角色。
新闻热点
疑难解答