RBAC + author_id

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Loveorigami
Сообщения: 974
Зарегистрирован: 2014.08.27, 21:54

RBAC + author_id

Сообщение Loveorigami » 2014.11.05, 09:41

Доброго времени суток!
Начал вникать в Rbac. Создал роли (admin, manager, author, user), разрешения к ним.

Пишу модуль статей. Доступ к нему от автора и выше.

В форме хочу сделать возможность поменять автора статьи. Т.е. вывести всех пользователей из таблицы users, которые имеют разрешение автор и выше... Этот же массив использовать потом в гриде для фильтра по автору.

Возможно ли такое?

Или же нужно отдельно создавать поле is_author в users и по нему делать выборку.
Неудобство при таком подходе может возникнуть, если захочетеся разделить авторов (один может писать уроки, второй статьи, третий - блог, а четвертый - новости и блог и тп....). Через RBAC это можно реализовать через разрешения.

А вот как достать таких пользователей с имеющимся доступом к модулю?

Loveorigami
Сообщения: 974
Зарегистрирован: 2014.08.27, 21:54

Re: RBAC + author_id

Сообщение Loveorigami » 2014.11.05, 11:33

Нашел одну рекомендацию.
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). 
Но похоже это из yii1.1

Применительно к 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'],
        ], 
- связи сформированных таблиц
2014-11-05_11-34-26.jpg
2014-11-05_11-34-26.jpg (88.01 КБ) 1443 просмотра
- rbac_auth_assignment у меня пустая. В связи с чем не пойму, как дальше двигаться да и как потом подступиться к users ?

Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: RBAC + author_id

Сообщение vova07 » 2014.11.05, 12:27

По аналогии с 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;
}
Не проверял так что могут быть косяки, но как появится возможность посмотрю.

П.С. Структура базы дефолтная.

Loveorigami
Сообщения: 974
Зарегистрирован: 2014.08.27, 21:54

Re: RBAC + author_id

Сообщение Loveorigami » 2014.11.05, 17:51

Спасибо за наводку ). Структура базы у меня тоже дефолтная.
Гляну, что к чему.

Ответить