Php 如何在Yii2和DbManager中获得specefic角色的用户?

Php 如何在Yii2和DbManager中获得specefic角色的用户?,php,yii,yii2,rbac,Php,Yii,Yii2,Rbac,如何在Yii2中获取specefic角色的用户,在RBAC中获取DbManager 请介绍一些用于用户管理和角色管理的API 我搜索并阅读,但没有找到任何解决方案。我使用@Manquer guide并编写了以下函数: public static function getRoleUsers($role_name) { $connection = \Yii::$app->db; $connection->open(); $comm

如何在Yii2中获取specefic角色的用户,在RBAC中获取DbManager

请介绍一些用于用户管理和角色管理的API


我搜索并阅读,但没有找到任何解决方案。

我使用@Manquer guide并编写了以下函数:

public static function getRoleUsers($role_name)
    {
        $connection = \Yii::$app->db;
        $connection->open();

        $command = $connection->createCommand(
            "SELECT * FROM auth_assignment INNER JOIN user ON auth_assignment.user_id = user.id " .
            "WHERE auth_assignment.item_name = '" . $role_name . "';");

        $users = $command->queryAll();
        $connection->close();

        return $users;
    }

可能对某人有用。

我编写了这个函数,可以添加到用户类中

 /**
 * Finds all users by assignment role
 *
 * @param  \yii\rbac\Role $role
 * @return static|null
 */
public static function findByRole($role)
{
    return static::find()
        ->join('LEFT JOIN','auth_assignment','auth_assignment.user_id = id')
        ->where(['auth_assignment.item_name' => $role->name])
        ->all();
}

由于Yii版本2.0.7,它实现的
DbManager
ManagerInterface
在没有自定义代码的情况下实现了您想要的功能。

rbac\ManagerInterface没有为此提供API。您必须编写自己的,如果您使用DbManager进行RBAC,这相当简单,您只需编写一个DB查询即可。如果您使用的是PhpManager,那么它会稍微复杂一些,因为filemanger将数据存储在数组中,如[user][role],因此您必须首先转置数组以获取数据,或者遍历所有用户。谢谢。我根据您的指南编写了一个函数。使用这段代码,您可以按角色检索用户模型:$operatoriIds=Yii::$app->authManager->getUserIdsByRole('operator')$operators=User::find()->where(['id'=>$operatoriIds])->all();这是一个非常干净的解决方案,它对我很有效。通过使用
左加入
,您还将获得与他们没有任何关联角色的用户。