Yii中基于角色的访问控制(RBAC)的使用

admin 发表于 [PHP] 分类,标签: PHP开发框架 Yiiframework
0

在开发一个有多种用户的网络应用时,对权限的判断总是一个很麻烦的事情。

Yii支持RBAC(Role-Based Access Control),结合filter,就给我们提供了非常简单方便的权限控制方法。

其实RBAC的原理很简单。

先梳理一下默认的Yii的授权filter:accessControl。它是根据accessRules按照用户的身份(users)来验证并授 权的,默认的有*(任何用户),@(通过登录验证的用户),admin(管理员)。通过一系列这些accessRules,指定了这三种身份用户的各自可 调用的action的权限。

而RBAC和默认的按照users的原理一样。通过指定”roles”来限定对应角色用户的可用action的权限。用”roles”替 换”users”即可,因为Yii的accessControl是支持roles的。通过这种方式,在Contoller内部,通过指定 accessRules就可以控制权限。在其他地方,比如控制一些view的显示的时候,可以用 Yii::app()->user->checkAccess(role)来进行权限判断。

RBAC本身也有特别之处。看官方的一段原话:

在Yii的RBAC的一个基本概念是authorization item (授权项目)。一个授权项目是一个做某事的许可(如创造新的博客发布,管理用户)。根据其粒度和targeted audience, 授权项目可分为operations (行动),tasks (任务)和 roles (角色)。角色包括任务,任务包括行动,行动是许可是个原子。 例如,我们就可以有一个administrator 角色,包括post managementuser management 任务。user management 任务可能包括create userupdate userdelete user 行动。为了更灵活,Yii也可以允许角色包括其他角色和动作,任务包括其他任务,行动包括其他行动。

也就是说在Yii::app()->user->checkAccess(role)的时候,role可以是operations,tasks和roles。

可能比较麻烦的就是初始化RBAC。换句话说,就是怎样才能告诉系统,我需要设定那些角色和操作等等。

这里我使用了一个extension叫SRBAC 。可以按照文档很轻松地将这个扩展加入到web应用中。

sbrac很不错的功能是,根据你现有的controllers能够很智能地生成tasks以及operations。同时通过图形化的界面,可以 方便地设定roles,tasks和operations的关系。这些roles,tasks.operations和他们之间的关系,都放在数据库里。

对应的数据库配置在config/main.php中:

‘components’=>array(

……

‘authManager’=>array(

‘class’=>’CDbAuthManager’,

‘connectionID’=>’db’,

‘itemTable’=>’rbac_items’,

‘assignmentTable’=>’rbac_assignments’,

‘itemChildTable’=>’rbac_itemchildren’,

),

……

),

表的内容很简单,一看就明白了就不多说了。srbac的使用其实也很简单,感觉也不必多说。

通过srbac,可以对现有的用户、role、task、operation进行管理。

在你自己的controller中,你也可以通过访问数据库来修改权限。

这里可以使用一个现成的model,就是srbac中的models/Assignments.php来改变用户和role的关系。比如我在新建一个用户的时候,可以:

$auth = new Assignments;$auth->itemname = $model->type;

$auth->userid = $model->id;

$auth->save();

发表我的评论