Yii RBAC操作在不同的任务中

时间:2014-01-28 10:33:37

标签: yii role rbac

我遇到了有趣的情况。 我有两个角色。第一个孩子,第二个父母。我在我的子角色的任务'own.profile'中有'users.update'操作,如下所示:

Task: own.profile
  Operation: users.update
  Operation: users.view 

所以,还有另一个任务,但是在第二父角色中:

Task: company.users.control
  Operation: users.create
  Operation: users.delete
  Operation: users.update
  Operation: users.view

我的角色结构是否正常或出了什么问题?如果我尝试使用具有第二父角色的checkAccess('users.update'),将调用哪个任务?

1 个答案:

答案 0 :(得分:1)

好的,我想出了RBAC的行为:

我正在使用CDbAuthManager,因此在每个checkAccess中我们都会调用代码:

$parents=$this->db->createCommand()
         ->select('parent')
         ->from($this->itemChildTable)
         ->where('child=:name', array(':name'=>$itemName))
         ->queryColumn();
foreach($parents as $parent){
     if($this->checkAccessRecursive($parent,$userId,$params,$assignments))
         return true;
}

因此,Yii获取项目的所有父项并检查其中一个是否返回true。如果没有 - 返回false。第一次成功检查中断循环并返回true。