RBAC и запросы в БД

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

RBAC и запросы в БД

Сообщение Chelobaka »

Здравствуйте, столкнулся с такой проблемой.
Подключен RBAC из коробки.
Есть меню где скрываются пункты:

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

if (Yii::$app->user->can('user_log.list')) {
...
и есть место в контроллере где проверяется доступ пользователя к action

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

 if (!Yii::$app->user->can('user.administration')) {
 ....
 
Всё бы ничего. Но запросы в БД выглядят так:

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

SELECT * FROM `auth_assignment` WHERE `user_id`='1'
SELECT * FROM `auth_item` WHERE `name`='user.administration'
SELECT `parent` FROM `auth_item_child` WHERE `child`='user.administration'
SELECT * FROM `auth_item` WHERE `name`='admin'

SELECT * FROM `auth_item` WHERE `name`='user_log.list'
SELECT `parent` FROM `auth_item_child` WHERE `child`='user_log.list'
SELECT * FROM `auth_item` WHERE `name`='admin'
То есть для одго пользователя c id нужно несколько раз обращаться к БД.
Возможно имеет смысл создать Service что бы в нём хранить в массиве данные для роли admin из auth_item_child
повесить событие загрузку $app и не бегать в БД?

И проверять AuthService->can('user.administration');
Или как это решается в rbac? Когда нужно проверять права в нескольких места шаблона?
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: RBAC и запросы в БД

Сообщение yiijeka »

Включить кэширование. Оптимизировать разрешения для разных пользователей.
Аватара пользователя
leonenco
Сообщения: 155
Зарегистрирован: 2017.01.30, 22:42

Re: RBAC и запросы в БД

Сообщение leonenco »

Соглаен с @yiijeka, вы хотите и рыбку сьесть и косточкой не подавиться. Кэширование.
Ответить