Yii::$app->user->can слишком много запросов

Всё про контроль доступа пользователей: фильтры, RBAC, проверки
Ответить
Аватара пользователя
Introvert
Сообщения: 134
Зарегистрирован: 2017.07.04, 13:42
Откуда: Украина, Никополь

Yii::$app->user->can слишком много запросов

Сообщение Introvert » 2017.08.10, 13:42

Здравствуйте, так как же все таки уменьшить запросы при проверке роли? И почему изначально так получается, баг разработчиков? И цитирую samdark
Кешировать (даже в пределах запроса) назначенные юзеру роли не безопасно в общем случае. Например, отнимаем у админа права, а он всё ещё может что-то делать. Или другой пример — права выдаются по времени.
Пишу социальную сеть заявок для фирм.

chesar
Сообщения: 406
Зарегистрирован: 2013.04.10, 17:49

Re: Yii::$app->user->can слишком много запросов

Сообщение chesar » 2017.08.10, 14:00

Слишком много - сколько?

Аватара пользователя
Introvert
Сообщения: 134
Зарегистрирован: 2017.07.04, 13:42
Откуда: Украина, Никополь

Re: Yii::$app->user->can слишком много запросов

Сообщение Introvert » 2017.08.10, 14:05

chesar писал(а):
2017.08.10, 14:00
Слишком много - сколько?
На главной 13, когда без проверок вообще 3. На всех остальных страницах ровно по 27 запросов, т.к. проверок чуть больше, чем на главной.
Пишу социальную сеть заявок для фирм.

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

Re: Yii::$app->user->can слишком много запросов

Сообщение ElisDN » 2017.08.10, 14:41

Слишком много - это 200+
Не забудьте пройти мастер-класс по Yii2.

Аватара пользователя
Introvert
Сообщения: 134
Зарегистрирован: 2017.07.04, 13:42
Откуда: Украина, Никополь

Re: Yii::$app->user->can слишком много запросов

Сообщение Introvert » 2017.08.10, 14:44

ElisDN писал(а):
2017.08.10, 14:41
Слишком много - это 200+
Спасибо, но ведь их можно уменьшить и потратить на другие нужные задачи
Пишу социальную сеть заявок для фирм.

chesar
Сообщения: 406
Зарегистрирован: 2013.04.10, 17:49

Re: Yii::$app->user->can слишком много запросов

Сообщение chesar » 2017.08.10, 14:47

Покажите список запросов и код где производятся проверки.
По коду я вижу, что каждое обращение к разрешению кешируется в рамках запроса, если не указаны дополнительные параметры.

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

Re: Yii::$app->user->can слишком много запросов

Сообщение ElisDN » 2017.08.10, 14:55

Introvert писал(а):
2017.08.10, 14:44
Спасибо, но ведь их можно уменьшить и потратить на другие нужные задачи
Они кешируются по умолчанию.
Не забудьте пройти мастер-класс по Yii2.

Аватара пользователя
Introvert
Сообщения: 134
Зарегистрирован: 2017.07.04, 13:42
Откуда: Украина, Никополь

Re: Yii::$app->user->can слишком много запросов

Сообщение Introvert » 2017.08.10, 15:20

chesar писал(а):
2017.08.10, 14:47
Покажите список запросов и код где производятся проверки.
По коду я вижу, что каждое обращение к разрешению кешируется в рамках запроса, если не указаны дополнительные параметры.
https://youtu.be/Sa0F6KkxK9o
Пишу социальную сеть заявок для фирм.

nepob
Сообщения: 18
Зарегистрирован: 2016.02.23, 09:25

Re: Yii::$app->user->can слишком много запросов

Сообщение nepob » 2017.08.11, 17:44

Introvert писал(а):
2017.08.10, 15:20
chesar писал(а):
2017.08.10, 14:47
Покажите список запросов и код где производятся проверки.
По коду я вижу, что каждое обращение к разрешению кешируется в рамках запроса, если не указаны дополнительные параметры.
https://youtu.be/Sa0F6KkxK9o
Как видно из видео, в среднем такой запрос занимает около 0.5 мс. Даже если вы их все закешируете, то прирост в производительности составит около 1 мс. Стоит ли оно того?

Аватара пользователя
maleks
Сообщения: 1510
Зарегистрирован: 2012.12.26, 12:56

Re: Yii::$app->user->can слишком много запросов

Сообщение maleks » 2017.08.12, 08:38

Introvert писал(а):
2017.08.10, 13:42
Здравствуйте, так как же все таки уменьшить запросы при проверке роли? И почему изначально так получается, баг разработчиков? И цитирую samdark
Кешировать (даже в пределах запроса) назначенные юзеру роли не безопасно в общем случае. Например, отнимаем у админа права, а он всё ещё может что-то делать. Или другой пример — права выдаются по времени.
Они пишут для общего случая, поэтому перестраховываются.
Если у вас нет каких то специфичных требований, то кеширование assignments в пределах запроса значительно уменьшит кол-во запросов.
Ситуацию когда вначале работы скрипта у пользователя есть право и он им пользуется, а через 20 мс его у него отняли и это надо учитывать, отношу к весьма редким.

Аватара пользователя
Introvert
Сообщения: 134
Зарегистрирован: 2017.07.04, 13:42
Откуда: Украина, Никополь

Re: Yii::$app->user->can слишком много запросов

Сообщение Introvert » 2017.08.12, 18:04

Как видно из видео, в среднем такой запрос занимает около 0.5 мс. Даже если вы их все закешируете, то прирост в производительности составит около 1 мс. Стоит ли оно того?
Не стоит)
Пишу социальную сеть заявок для фирм.

Аватара пользователя
Introvert
Сообщения: 134
Зарегистрирован: 2017.07.04, 13:42
Откуда: Украина, Никополь

Re: Yii::$app->user->can слишком много запросов

Сообщение Introvert » 2017.08.12, 18:42

Они пишут для общего случая, поэтому перестраховываются.
Если у вас нет каких то специфичных требований, то кеширование assignments в пределах запроса значительно уменьшит кол-во запросов.
Ситуацию когда вначале работы скрипта у пользователя есть право и он им пользуется, а через 20 мс его у него отняли и это надо учитывать, отношу к весьма редким.
Как это сделать, кеширование assignments? Можно пример
Пишу социальную сеть заявок для фирм.

Аватара пользователя
maleks
Сообщения: 1510
Зарегистрирован: 2012.12.26, 12:56

Re: Yii::$app->user->can слишком много запросов

Сообщение maleks » 2017.08.13, 06:51

переписать DbManager::getAssignments чтобы не делало каждый раз новый запрос.

Ответить