Страница 1 из 1

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

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

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

Добавлено: 2017.08.10, 14:00
chesar
Слишком много - сколько?

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

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

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

Добавлено: 2017.08.10, 14:41
ElisDN
Слишком много - это 200+

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

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 2017.08.12, 18:04
Introvert
Как видно из видео, в среднем такой запрос занимает около 0.5 мс. Даже если вы их все закешируете, то прирост в производительности составит около 1 мс. Стоит ли оно того?
Не стоит)

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

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

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

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