Как получить пользователей с определенной ролью в Yii2 и DBManager?


Как получить пользователей с определенной ролью в Yii2 и DBManager в RBAC?

Пожалуйста, представьте некоторые API для управления пользователями и ролями.

Я искал и читал Руководство по Yii2, но не нашел никакого решения.

Author: b24, 2014-08-11

3 answers

Я написал эту функцию, которую можно добавить в пользовательский класс.

 /**
 * 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
Author: Paul van Schayck, 2014-12-13 15:05:20

Начиная с версии 2.0.7 Yii, DbManager и ManagerInterface, которые он реализует, имеют getUserIdsByRole($roleName) который делает то, что вы хотите, без пользовательского кода.

 5
Author: mmonem, 2018-01-15 16:20:43

Я использовал руководство @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
Author: b24, 2014-08-22 05:57:04