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


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

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

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


2311
2017-08-11 16:14


起源

rbac \ managerInterface不为此提供API。你必须编写自己的,如果你使用DbManager作为你的RBAC它是相当直接的,你可以简单地编写一个数据库查询。如果您正在使用PhpManager,那么它会稍微复杂一点,因为文件管理器将数据存储在数组中,如[user] [role],因此您必须首先转置数组以获取数据,或迭代所有用户。 - Manquer
谢啦。我根据你的指南写了一个函数。 - b24


答案:


我写了这个函数,可以添加到User类。

 /**
 * 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();
}

5
2017-12-13 15:05



通过使用 LEFT JOIN 您还将获得没有任何与之关联的角色的用户。 - Igor Jerosimić


自Yii版本2.0.7起, DbManager 和 ManagerInterface 它实现了它 getUserIdsByRole($roleName) 没有自定义代码,你可以做你想要的。


5
2017-10-24 08:59



使用此代码块,您可以按角色检索用户模型:$ operatoriIds = Yii :: $ app-> authManager-> getUserIdsByRole('operator'); $ operators = User :: find() - > where(['id'=> $ operatoriIds]) - > all(); - Daniele Montes


我用@Manquer指南编写了这个函数:

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;
    }

也许对某人有用。


4
2017-08-22 05:57