mdmsoft-yii2-admin. Много запросов.

Всё про контроль доступа пользователей: фильтры, RBAC, проверки
Ответить
reactive94
Сообщения: 3
Зарегистрирован: 2019.12.06, 11:22

mdmsoft-yii2-admin. Много запросов.

Сообщение reactive94 »

Здравствуйте. При входе в систему под определённым пользователем(например user) почему-то выполняются запросы для других пользователей.
Достаточно было этого:
SELECT * FROM "auth_item" WHERE "name"='user'
SELECT "parent" FROM "auth_item_child" WHERE "child"='user'

А получаю сверху ещё вот такие запросы:
SELECT * FROM "auth_item" WHERE "name"='admin'
SELECT "parent" FROM "auth_item_child" WHERE "child"='admin'
SELECT * FROM "auth_item" WHERE "name"='manager'
SELECT "parent" FROM "auth_item_child" WHERE "child"='manager'

Да, эти страницы могу просматривать так же admin и manager, но почему проходят запросы к ним когда я авторизирован под user. Пока это не критично, но с добавлением пользователей и Ролей растёт количество запросов к базе и вместо 10 может быть под 40. Сталкивался ли кто-нибудь с такой проблемой?
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: mdmsoft-yii2-admin. Много запросов.

Сообщение maleks »

Так задумано.
Если у вас есть вложенные роли, то при поиске будет все время так перебирать всех родителей, пока не совпадет с текущим пользователем или не покажет что он не имеет данных прав.
Yii2 universal module sceleton - for basic and advanced templates
reactive94
Сообщения: 3
Зарегистрирован: 2019.12.06, 11:22

Re: mdmsoft-yii2-admin. Много запросов.

Сообщение reactive94 »

maleks писал(а): 2019.12.06, 16:22 Так задумано.
Если у вас есть вложенные роли, то при поиске будет все время так перебирать всех родителей, пока не совпадет с текущим пользователем или не покажет что он не имеет данных прав.
Эти Роли у меня не вложенные. Я создал 3 различные роли: admin, manager, user. Они не являются вложенными. Просто все 3 роли имеют доступ например к site/index. И когда захожу туда, то почему-то sql запросы идут по всем ролям, если я зарегистрирован под user. Когда же я зарегистрирован по admin, то такого нет(не могу даже понять почему так, под одним пользователем 10 запросов, под другим 16).
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: mdmsoft-yii2-admin. Много запросов.

Сообщение maleks »

reactive94 писал(а): 2019.12.06, 16:39 Эти Роли у меня не вложенные. Я создал 3 различные роли: admin, manager, user. Они не являются вложенными. Просто все 3 роли имеют доступ например к site/index. И когда захожу туда, то почему-то sql запросы идут по всем ролям, если я зарегистрирован под user. Когда же я зарегистрирован по admin, то такого нет(не могу даже понять почему так, под одним пользователем 10 запросов, под другим 16).
Вся соль в логике работы checkAccessRecursive.
Раз ваше разрешение принадлежит всем трем ролям, все их три и будет перебирать, пока не найдет.
Роль user у вас видимо позже добавлена, поэтому перед ней проверит(неуспешно) еще те другие роли.
А по admin сразу попадание.
Yii2 universal module sceleton - for basic and advanced templates
reactive94
Сообщения: 3
Зарегистрирован: 2019.12.06, 11:22

Re: mdmsoft-yii2-admin. Много запросов.

Сообщение reactive94 »

Спасибо большое за разъяснение. Для полноты картины, есть ли у вас ссылки на материал, или можете написать как тогда правильнее создавать роли, разрешения и пользователей?
maleks писал(а): 2019.12.07, 08:52 Вся соль в логике работы checkAccessRecursive.
Раз ваше разрешение принадлежит всем трем ролям, все их три и будет перебирать, пока не найдет.
Роль user у вас видимо позже добавлена, поэтому перед ней проверит(неуспешно) еще те другие роли.
А по admin сразу попадание.
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: mdmsoft-yii2-admin. Много запросов.

Сообщение maleks »

Все и так правильно, не считайте копейки/запросики.

Если поднапрячься то вроде можно кешированием оптимизировать, гуглите.
Yii2 universal module sceleton - for basic and advanced templates
Ответить