【问题标题】:Yii. Get Users based on role易。根据角色获取用户
【发布时间】:2015-02-19 03:16:25
【问题描述】:

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

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

【问题讨论】:

标签: yii rbac


【解决方案1】:

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

【讨论】:

    【解决方案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() ;
    
    
    }....
    

    【讨论】:

      【解决方案3】:

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

      // 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)
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-16
        • 2014-08-18
        • 1970-01-01
        • 2014-10-22
        • 2018-08-20
        • 1970-01-01
        • 2014-08-19
        • 2018-11-09
        相关资源
        最近更新 更多