Доброго времени суток!
Начал вникать в Rbac. Создал роли (admin, manager, author, user), разрешения к ним.
Пишу модуль статей. Доступ к нему от автора и выше.
В форме хочу сделать возможность поменять автора статьи. Т.е. вывести всех пользователей из таблицы users, которые имеют разрешение автор и выше... Этот же массив использовать потом в гриде для фильтра по автору.
Возможно ли такое?
Или же нужно отдельно создавать поле is_author в users и по нему делать выборку.
Неудобство при таком подходе может возникнуть, если захочетеся разделить авторов (один может писать уроки, второй статьи, третий - блог, а четвертый - новости и блог и тп....). Через RBAC это можно реализовать через разрешения.
А вот как достать таких пользователей с имеющимся доступом к модулю?
RBAC + author_id
-
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
-
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
Re: RBAC + author_id
Нашел одну рекомендацию.
http://stackoverflow.com/questions/1475 ... ed-on-role
Но похоже это из yii1.1
Применительно к yii2
- конфиг
- связи сформированных таблиц
- rbac_auth_assignment у меня пустая. В связи с чем не пойму, как дальше двигаться да и как потом подступиться к users ?
http://stackoverflow.com/questions/1475 ... ed-on-role
Код: Выделить всё
The easiest way I've found to do this is to create an AuthAssignment model that maps to your auth_assignment table. Then, you can setup relationships, scopes, etc for it and query using it to retrieve all user models. There isn't anything particularly special about the auth_assignment table (as it is mainly just roles in there).
Применительно к yii2
- конфиг
Код: Выделить всё
'authManager' => [
'class' => 'yii\rbac\DbManager',
'itemTable' => 'rbac_auth_item',
'itemChildTable' => 'rbac_auth_item_child',
'assignmentTable' => 'rbac_auth_assignment',
'ruleTable' => 'rbac_auth_rule',
'defaultRoles' => ['admin', 'manager', 'author', 'user'],
],
Re: RBAC + author_id
По аналогии с getRolesByUser могу предположить что должно быть что-то такое:
Не проверял так что могут быть косяки, но как появится возможность посмотрю.
П.С. Структура базы дефолтная.
Код: Выделить всё
public function getUsersByRole($role)
{
if (empty($role)) {
return [];
}
$query = (new Query)->select('u.*')
->from(['a' => Yii::$app->authManager->assignmentTable, 'u' => User::tableName()])
->where('a.user_id=u.id')
->andWhere(['a.item_name' => (string) $role]);
$users = [];
foreach ($query->all(Yii::$app->authManager->db) as $row) {
$roles[$row['name']] = $this->populateItem($row); // Тут делаете популяцию объекта
}
return $users;
}
П.С. Структура базы дефолтная.
-
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
Re: RBAC + author_id
Спасибо за наводку ). Структура базы у меня тоже дефолтная.
Гляну, что к чему.
Гляну, что к чему.