Yii RBAC中的大致说明

Yii 1.15版本为例:

RBAC机制包含三个表;存放路径在 framework/web/auth/schema.sql;
RBAC中一共包含三种对象,操作(Operation)、 任务(Task) 和 角色(Role);

表结构

auth_items

功能

用来记录RBAC中的对象。

字段

  • name - 存放对象名称,字符串;
  • type - 对象类型,(0, 1, 2);
  • description - 相关的描述,长字符串;
  • bizrule - 长字符串,可以在这里定义一个PHP的代码块,以增强验证的扩展性;
  • data - 长字符串,序列化后的数组。用于给bizrule提供参数;

其中 type 字段的值含义为

  • 0 - Operation 操作
  • 1 - Task 任务
  • 2 - Role 角色

auth_assignments

功能

记录 用户->角色 之间的对应关系,将不同的用户分配至不同的角色(用户组)。

字段

  • itemname - 角色名称,和auth_items中对应,区分大小写;
  • userid - 用户ID,须在配置部分中预先定义所对应实际用户表的字段名;
  • bizrule - 同auth_items中的代码段;
  • data - 同上;

auth_itemchildren

功能

记录 角色->任务 、 角色->操作 和 任务->操作 之间的对应关系。

字段

  • parent - 父级名称。可以是角色名,也可以是任务名;
  • children - 字对象名称。可以是任务名,也可以是操作名;
初始化方法

可以使用手册提供的一些方法,放在某个控制器中执行一次(CLI模式或者浏览器访问都可以)即可;
当然,也可以手动,直接插入记录到数据库中。

验证方法

可以使用 CWebUser::checkAccess() 来验证,也可以通过 CAccessControlFilter 过滤器。

例如:
当前用户属于 Author 组(Role),需要验证是否有 EditPost 的任务(Task)权限,并且Post模型(CActiveRecord)中的 authorId 为当前用户ID; EditPost 的 bizrule 中包含

return  $params [ 'post' ] [ 'authorId' ]  ==  Yii :: app ( ) -> user -> id ;

开始验证:

$auth  =  Yii :: app ( ) -> authManager ; 
$post
  = Post :: model ( ) -> find ( $criteria ) ; 
$restricted  =  ! Yii :: app ( ) -> user -> checkAccess ( array (  'post'  =>  $post ,  ) ) ; 
   if ( false  ==  $restricted )  {
      // 验证通过
   } else {
      // 验证未通过
   }
一些变态的

获取当前用户所属的组(Role)时,使用

   $cuid  =  Yii :: app ( ) -> user -> id ; 
 $roles  =  Yii :: app ( ) -> authManager -> getRoles ( $cuid ) ;

这样得到的结果居然是一个包含CAuthItem对象的数组,每个对象的键名为该CAuthItemname属性。
所以,如果需要判断某个用户是否在组中,需要使用isset方法。

  $cuid  =  Yii :: app ( ) -> user -> id ;
  $roles  =  Yii :: app ( ) -> authManager -> getRoles ( $cuid ) ;
  if ( isset ( $roles [ 'Administrator' ] ) ) 
 {
 
   //当前用户是Administrator的一员

 }
;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值