Решил использовать в своём проекте AuthManager, выполнил всё по мануалу, всё впринципе работает, но когда я посмотрел в Profiler, то там я увидел около 50 запросов к БД касательно таблиц AuthManager'а
Это так и должно быть или я как-то не правильно использую AuthManager?
Как сократить кучу запросов при выполнении checkAccess?
Re: Как сократить кучу запросов при выполнении checkAccess?
Настройте связи между таблицами (скорее всего они уже настроены, на память не помню) и включите загрузку связанных таблиц одним запросом с помощью with, тогда запрос к базе будет только один.
А вообще это привет от AR, только давайте не будем опять разводить срач по этому поводу.
В целом менеджер вычисления прав в фреймворке устроен не эффективно, точнее он работает как по книжке, обходя последовательно все узлы дерева распределения прав, вместо того, чтобы использовать метод последовательного приближения и манипулировать наборами.
А вообще это привет от AR, только давайте не будем опять разводить срач по этому поводу.
В целом менеджер вычисления прав в фреймворке устроен не эффективно, точнее он работает как по книжке, обходя последовательно все узлы дерева распределения прав, вместо того, чтобы использовать метод последовательного приближения и манипулировать наборами.
Re: Как сократить кучу запросов при выполнении checkAccess?
Я так думаю что придётся свой простенький для своих нужд велосипед написать =)
Не знаете, может уже есть какойто дополнение к yii по этому поводу?
Не знаете, может уже есть какойто дополнение к yii по этому поводу?
Re: Как сократить кучу запросов при выполнении checkAccess?
yii-rights есть
Re: Как сократить кучу запросов при выполнении checkAccess?
Эм.. а здесь-то каким боком AR?TM123 писал(а):А вообще это привет от AR, только давайте не будем опять разводить срач по этому поводу.
Быть может оформите кодом.. да отправите разработчикам.. (они на такую "критику" лучше реагируют)...менеджер вычисления прав в фреймворке устроен не эффективно, точнее он работает как по книжке..
По мне - лучше PHPAuthManager пользовать.. Где-то видел про "красивую" обёртку ("велосипед"?), которая формирует массив правил для него на основе галочек (из БД). Что касается DBAuthManager-а - количество запросов можно уменьшить при помощи кэширования..Это так и должно быть или я как-то не правильно использую AuthManager?
http://www.yiiframework.com/forum/index ... ac-caching
Ну и в yii-rights кэширование есть
...
Re: Как сократить кучу запросов при выполнении checkAccess?
AR по умолчанию настроено чтоб не грузить связи, соответственно если у AR потом запрашивают не загруженную связь, то она ее начинает грузить по одному, вместо того, чтобы переспросить базу и загрузить данные с запрошенной связью.м.. а здесь-то каким боком AR?
Я уже об этом писал, но имеющийся на форуме член команды разработчиков интереса не проявил, наверное их все устраивает. Я собственно не менял алгоритм в штатном механизме, иначе бы выложил код замены. Авторизация у меня идет точно также, но вот вычислять права тысяч пользователей к миллионам записей при наличии сотен ролей очень напряжно штатным методом, поэтому написал хранимку которая работает на основе данных штатной системы распределения прав, но на много быстрее за счет того, что в штатной системе количество запросов равно количеству узлов в дереве конкретного пользователя, в моей оптимизации количество запросов равно максимальной глубине дерева для конкретного пользователя.Быть может оформите кодом.. да отправите разработчикам.. (они на такую "критику" лучше реагируют)
Если интересен код функции, могу выложить она всего команд 10, писал на скорую руку, думаю есть масса способов ее оптимизировать. Результаты работы функции можно без проблем встроить в штатный механизм распределения прав.
Re: Как сократить кучу запросов при выполнении checkAccess?
Вроде речь о checkAccess? Или мы о разном?TM123 писал(а):AR по умолчанию настроено чтоб не грузить связи, соответственно если у AR потом запрашивают не загруженную связь, то она ее начинает грузить по одному, вместо того, чтобы переспросить базу и загрузить данные с запрошенной связью.м.. а здесь-то каким боком AR?
Конечно, выкладывайте.. в отдельной теме.. тем более там 10 команд.. Хотя у "хранимки" есть один небольшой минус - она "хранимка"TM123 писал(а):Я уже об этом писал, но имеющийся на форуме член команды разработчиков интереса не проявилБыть может оформите кодом.. да отправите разработчикам.. (они на такую "критику" лучше реагируют)
...
Если интересен код функции, могу выложить она всего команд 10, писал на скорую руку, думаю есть масса способов ее оптимизировать. Результаты работы функции можно без проблем встроить в штатный механизм распределения прав.
...
Re: Как сократить кучу запросов при выполнении checkAccess?
Ну да, а запрашивает она данные разве не через ARВроде речь о checkAccess? Или мы о разном?
Позже, любую хранимку можно переделать под PHP, только работать будет дольше.Конечно, выкладывайте.. в отдельной теме.. тем более там 10 команд.. Хотя у "хранимки" есть один небольшой минус - она "хранимка"
Re: Как сократить кучу запросов при выполнении checkAccess?
Посмотрел код CDbAuthManager и не нашел там AR, чистое DAO.TM123 писал(а):Ну да, а запрашивает она данные разве не через ARВроде речь о checkAccess? Или мы о разном?