Генерация разрешений RBAC из существующих контроллеров

Всё про контроль доступа пользователей: фильтры, RBAC, проверки
Ответить
ar2r
Сообщения: 4
Зарегистрирован: 2017.08.18, 10:04

Генерация разрешений RBAC из существующих контроллеров

Сообщение ar2r » 2017.08.18, 10:15

Приветствую всех! Обшерстил интерент и форумы, не нашел ответа на вопрос, надеюсь посоветуете решение.

Суть вопроса: есть много контроллеров, которые периодически будут добавлятся, каждый контроллер имеет стандартные 4 метода (CRUD). Нужно сделать возможность разделять права на каждый контроллер и метод отдельно. Идея каждый раз дописывать в rbac/init новый контроллер, не очень радует.

В базе разрешения хотелось бы хранить как "module-one/method-one", по этому перебор файлов в папке controllers, не совсем подходит.

Собственно вопросы:
1. Можно ли как-то красивее получить все контроллеры, или все роуты, не прибегая к обходу и парснгу файлов в папке controllers?
2. Если нет, то как получив файл ModuleOneController.php, получить его id в роуте, т.е. "module-one"?
3. Может что-то упускаю, как решают такие вопросы опытные юиишники? Не плохая ли идея в целом, подводные камни какие может есть, которые не вижу пока?

Спасибо.

Nex-Otaku
Сообщения: 825
Зарегистрирован: 2016.07.09, 21:07

Re: Генерация разрешений RBAC из существующих контроллеров

Сообщение Nex-Otaku » 2017.08.18, 13:12

Нужно сделать возможность разделять права на каждый контроллер и метод отдельно.
Что имеется в виду? Управление через админку? Или прописывание разрешений в коде?

ar2r
Сообщения: 4
Зарегистрирован: 2017.08.18, 10:04

Re: Генерация разрешений RBAC из существующих контроллеров

Сообщение ar2r » 2017.08.18, 13:23

Управление через админку, чекбоксами (к примеру). Чтобы была возможность гибкой настройки прав без залезания в код.

Как пример, допустим даём user1 права на module1(index,view) и на module2(update,delete) а user1 на module1(delete) и module2(update). И так для любого пользователя, любой набор модулей и действий к ним.

В коде будет универсальная проверка, что-то вроде

Код: Выделить всё

if (Yii::$app->user->can($this->controller->id.'/'.$this->action->id))


Аватара пользователя
ElisDN
Сообщения: 5428
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Генерация разрешений RBAC из существующих контроллеров

Сообщение ElisDN » 2017.08.19, 07:44

Создаёте, например, class RouteRule и используете:

Код: Выделить всё

Yii::$app->user->can('route', ['route' => $this->controller->route])

ar2r
Сообщения: 4
Зарегистрирован: 2017.08.18, 10:04

Re: Генерация разрешений RBAC из существующих контроллеров

Сообщение ar2r » 2017.08.21, 06:55

ElisDN писал(а):
2017.08.19, 07:44
Создаёте, например, class RouteRule и используете:

Код: Выделить всё

Yii::$app->user->can('route', ['route' => $this->controller->route])
С проверкой нет проблем, это понятно. Как изначально получить список этих контроллеров, чтобы в админке вывести и дать админу возможность распределять эти самые права.

ar2r
Сообщения: 4
Зарегистрирован: 2017.08.18, 10:04

Re: Генерация разрешений RBAC из существующих контроллеров

Сообщение ar2r » 2017.08.21, 06:57

maleks писал(а):
2017.08.19, 07:05
viewtopic.php?f=19&t=33846&p=172500
Спасибо, видать пропустил в поиске этот топик.

Ответить