0

我正在使用本机CDbAuthManager在我的 web 应用程序中实现 RBAC。如何获取所有有权执行角色的用户?假设我有名为updateprofile. 我想获得分配给该角色的所有用户。我搜索了文档并找不到功能。

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

4

3 回答 3

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() ;


}....
于 2013-10-19T11:48:12.763 回答
2

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

于 2013-02-08T00:46:07.370 回答
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)
}
于 2015-02-11T08:51:23.760 回答