@MarkLb

Как сделать фильтрацию по ролям в GridView?

Здравствуйте. Есть 2 роли, допустим:
- user
- client

И нужно выводить роль в GridView только участников с ролью user. По-сути, нужно при запросе в AR сделать фильтр по таблице auth_assignment, но не могу придумать, как грамотно это реализовать.
  • Вопрос задан
  • 107 просмотров
Пригласить эксперта
Ответы на вопрос 2
qonand
@qonand
Software Engineer
1. Сделать в модели пользователя связь с таблицей/моделью auth_assignment
2. В запросе получающем данные для GridView сделать joinWith для объявленной связи
3. В получившемся запросе написать нужный фильтры
Ответ написан
mhthnz
@mhthnz
PHP, YII2, Golang, Linux
Делаете LEFT JOIN к таблице auth_assignment и указываете роль, делаете проверку связанной таблицы на NULL
$aq = Users::find()->distinct()->alias('u');
if ($this->role !== null) {
    $aq->leftJoin('auth_assignment a', 'a.user_id = u.id AND a.item_name = :role', [':role' => $this->role]);
    $aq->where("a.user_id IS NOT NULL");
}


Но это такой себе путь, проще, я думаю, выбрать сначала auth_assignment а ее уже джойнить к юзерс, но если фильтр по таблице юзерс, то это может быть проблематично, поэтому так.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы