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

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

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

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

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

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

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

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

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

Аватара пользователя
Introvert
Сообщения: 62
Зарегистрирован: 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
Сообщения: 4310
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

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

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

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

Аватара пользователя
Introvert
Сообщения: 62
Зарегистрирован: 2017.07.04, 13:42

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

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

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

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

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

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

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

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

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

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

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

Аватара пользователя
Introvert
Сообщения: 62
Зарегистрирован: 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
Сообщения: 16
Зарегистрирован: 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
Сообщения: 1440
Зарегистрирован: 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
Сообщения: 62
Зарегистрирован: 2017.07.04, 13:42

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

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

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

Аватара пользователя
Introvert
Сообщения: 62
Зарегистрирован: 2017.07.04, 13:42

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

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

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

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

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

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

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

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость