【问题标题】:Yii RBAC operation in different tasksYii RBAC 在不同任务中的操作
【发布时间】:2014-01-29 02:15:02
【问题描述】:

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

【问题讨论】:

    标签: yii role rbac


    【解决方案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 获取 item 的所有父项并检查其中是否有一个返回 true。如果没有 - 返回 false。第一次成功的检查会中断循环并返回 true。

    【讨论】:

    • 赞成,用于解决您自己的问题,并回发解决方案。
    猜你喜欢
    • 2014-07-06
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 2013-04-22
    • 2013-11-28
    • 1970-01-01
    相关资源
    最近更新 更多