我遇到了有趣的情况。 我有两个角色。第一个孩子,第二个父母。我在我的子角色的任务'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'),将调用哪个任务?
答案 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。