Yii的。根据角色获取用户

时间:2013-02-07 17:06:56

标签: yii rbac

我正在使用本机CDbAuthManager在我的webapp中实现RBAC。如何获得有权执行角色的所有用户?假设我有一个名为updateprofile的角色。我希望将所有用户分配到该角色。我搜索了文档,无法找到函数。

(我知道我可以遍历所有用户模型并在checkAccess()循环中执行foreach,但我更喜欢更好的解决方案)

3 个答案:

答案 0 :(得分:2)

我发现这样做的最简单方法是创建一个映射到auth_assignment表的AuthAssignment模型。然后,您可以为它设置关系,范围等,并使用它来查询所有用户模型。 auth_assignment表没有什么特别之处(因为它主要只是那里的角色)。

答案 1 :(得分:2)

代码

class AuthAssginment extends CActiveRecord{.....
    public function getUsersBaseOnRole($role) {
         return Yii::app()->db->createCommand()
                    ->select('userid')
                    ->from($this->tableName())
                    ->where('itemname=:role', array(
                        ':role' => $role,))
                    ->queryAll() ;


}....

答案 2 :(得分:1)

我认为其他回复并没有给你完美的结果,因为角色可以是分层的,因此,你不能使用直接查询或关系。我的解决方案运作良好是:

// list all users with 'userManagement' role
if($users = Users::model()->findAll()) {
    foreach($users as $id => $user) {
        if(!$user->checkAccess('userManagement')) {
            unset($users[$id]);
        }
    }
    $users = array_values($users); // to reset indices (optional)
}