pdoResources. Учет прав доступа на ресурс
Здравствуйте.
Пытаюсь заменить getResources на pdoResources. Использую pdoTools 2.1.3, MODx Revolution 2.2.14-pl traditional.
Но pdoResources выводит список ресурсов без учета прав пользователя на эти ресурсы.
Вызов pdoResources
[[!pdoResources?
&parents=`3672`
&limit=`0`
&depth=`0`
&sortby=`{«publishedon»:«DESC»}`
&sortdir=`DESC`
&hideContainers=`1`
&includeTVs=`1`
&processTVs=`1`
&tpl=`newsGRTest_tpl`
]]
Нашла только статью 2013 года о том, что не реализован функционал, но там версия pdoTools 1.6.0-pl bezumkin.ru/sections/components/1775/
Подскажите, пожалуйста, в чем проблема.
Пытаюсь заменить getResources на pdoResources. Использую pdoTools 2.1.3, MODx Revolution 2.2.14-pl traditional.
Но pdoResources выводит список ресурсов без учета прав пользователя на эти ресурсы.
Вызов pdoResources
[[!pdoResources?
&parents=`3672`
&limit=`0`
&depth=`0`
&sortby=`{«publishedon»:«DESC»}`
&sortdir=`DESC`
&hideContainers=`1`
&includeTVs=`1`
&processTVs=`1`
&tpl=`newsGRTest_tpl`
]]
Нашла только статью 2013 года о том, что не реализован функционал, но там версия pdoTools 1.6.0-pl bezumkin.ru/sections/components/1775/
Подскажите, пожалуйста, в чем проблема.
- ВКонтакте
- Telegram
- Viber
- РЎРєРѕРїРСвЂВВВВВВВВровать ссылку
2 146
0
Комментарии: 16
25 августа 2015, 11:12
Вся проблема в том, что нужно открыть документацию docs.modx.pro/components/pdotools/general-settings
и найти параметр checkPermissions.
Далее вбить его в поиск на этом сайте, что бы увидеть примеры modx.pro/search?query=checkPermissions
в общем вам скорее всего нужно
и найти параметр checkPermissions.
Далее вбить его в поиск на этом сайте, что бы увидеть примеры modx.pro/search?query=checkPermissions
в общем вам скорее всего нужно
&checkPermissions=`list`
25 августа 2015, 16:32
Безграничное спасибо за пинок в нужном направлении :) Это получилось. pdoResources выводит верный список ресурсов в соответствии с правами пользователя.
Еще спрошу.
Теперь все это хозяйство оборачиваю в pdoPage. И тут не все гладко проходит.
На первой странице выводится один документ; на след. странице три, но нумерация с 5 документа, на третьей 4 документа нумерация с 9-го… Почему?
Еще спрошу.
Теперь все это хозяйство оборачиваю в pdoPage. И тут не все гладко проходит.
[[!pdoPage?
&element=`pdoResources`
&parents=`3672`
&limit=`4`
&sortby=`{"publishedon":"DESC"}`
&hideContainers=`1`
&showUnpublished =`0`
&tpl=`news_tpl`
&idx=`[[+firstItem]]`
&pageLimit=`5`
&pageNavVar=`page.nav`
&checkPermissions=`list`
&cach=`0`
]]
Вывожу документы в чанке news_tpl. Пытаюсь сквозную нумерацию у документов на страницах сделать. [[+idx]]. [[+pagetitle]]
Получается кривота. Всего 8 документов.На первой странице выводится один документ; на след. странице три, но нумерация с 5 документа, на третьей 4 документа нумерация с 9-го… Почему?
25 августа 2015, 16:48
Ну вот тут все сложнее.
Потому что сначала выбирается 4 ресурса из БД, а потом проверяются права. В итоге видим ту картину, что вы описали. А проверять права в момент выборки нельзя.
Не сделать корректную постраничную навигацию с pdoPage и pdoResources с проверкой прав таким образом…
Копался в этом же направлении сам как-то, в итоге забил.
Потому что сначала выбирается 4 ресурса из БД, а потом проверяются права. В итоге видим ту картину, что вы описали. А проверять права в момент выборки нельзя.
Не сделать корректную постраничную навигацию с pdoPage и pdoResources с проверкой прав таким образом…
Копался в этом же направлении сам как-то, в итоге забил.
25 августа 2015, 17:10
Я так понимаю, getPage+getResources не справляются тоже с этим.
Алексей, а других вариантов реализации такой постраничной навигации нет?
Алексей, а других вариантов реализации такой постраничной навигации нет?
25 августа 2015, 17:10
Почему?Потому, что система прав в MODX настолько гибкая, что до выборки исключить ресурсы не получается.
Поэтому они исключаются после. И никак этого не избежать, разве что самостоятельно выбирать ресурсы по каким-то другим параметрам, типа родителя или шаблона, а не фильтровать по разрешению.
25 августа 2015, 17:41
Ну так не должно быть.
Есть новости. Каждая входит в разные группы ресурсов.
Вызываем pdoResources с limit=10. Администратор увидит все 10, Менеджер- 2, Гость — 1. Хотя в БД есть и другие новости предназначенные для Менеджера и Гостя. Но за счет того, что выбираются они без учета прав, страдают все кроме Администратора :)
Есть новости. Каждая входит в разные группы ресурсов.
Вызываем pdoResources с limit=10. Администратор увидит все 10, Менеджер- 2, Гость — 1. Хотя в БД есть и другие новости предназначенные для Менеджера и Гостя. Но за счет того, что выбираются они без учета прав, страдают все кроме Администратора :)
25 августа 2015, 17:53
Ну так не должно быть.Предложите своё решение, как выбрать ресурсы с учётом системы прав MODX.
Я с удовольствием освою этот трюк и даже включу в функционал pdoTools.
25 августа 2015, 19:27
Если вы точно знаете, какие группы ресурсов удовлетворяют, отключите проверку прав и добавьте в выборку условия по привязке и проверке групп ресурсов через innerJoin/leftJoin. Как именно сделать — не подскажу, надо экспериментировать. Не настолько хорошо знаю SQL, чтобы сходу написать условия.
25 августа 2015, 22:47
Есть идея: можно попробовать решить этот вопрос двойным вызовом pdoResources:
Не проверял, но должно работать.
[[!pdoPage ?
&parents=`0`
&limit=`4`
&resources=`[[!pdoResources?&parents=`3672`&limit=`0`&depth=`0`&return=`ids`&checkPermissions=`list`]]`
&sortby=`{"publishedon":"DESC"}`
&sortdir=`DESC`
&hideContainers=`1`
&includeTVs=`tvname1,tvname2`
&processTVs=`1`
&tpl=`news_tpl `
]]
Вложенный вызов в &resources вернёт список всех подходящих ресурсов, которые прошли проверку для юзера. А второй вызов будет работать уже с этими ресурсами без проверок — и выведет их разбитыми на страницы как положено.Не проверял, но должно работать.
26 августа 2015, 08:43
Да, по идее сработает.
Правда, наверное, будут проблемы с производительностью, если количество дочерних ресурсов будет большим, ведь для каждого из них будет производится проверка прав.
Правда, наверное, будут проблемы с производительностью, если количество дочерних ресурсов будет большим, ведь для каждого из них будет производится проверка прав.
26 августа 2015, 08:48
Здесь уж надо выбирать, что есть меньшее из зол — корректная пагинация и низкая производительность или некорректная пагинация с хорошей производительностью.
Причем, смотреть в условиях определенного проекта.
Причем, смотреть в условиях определенного проекта.
26 августа 2015, 09:08
Согласен, да.
Можно написать свой сниппет, который будет вызывать pdoResources и кэшировать эти ids для конкретного юзера. Можно даже, наверное, сделать это и средствами самого pdoResources, используя параметры &cacheKey и &cacheTime, но мне сейчас некогда проверять.
Направление работы должно быть понятно.
Можно написать свой сниппет, который будет вызывать pdoResources и кэшировать эти ids для конкретного юзера. Можно даже, наверное, сделать это и средствами самого pdoResources, используя параметры &cacheKey и &cacheTime, но мне сейчас некогда проверять.
Направление работы должно быть понятно.
26 августа 2015, 12:16
26 августа 2015, 12:30
Производительность можно замерить, если выставить в шаблоне страницы вот такие плейсхолдеры внизу:
Общее время: [^t^] Время запросов: [^qt^] Количество запросов: [^q^]У нас, например, вы можете видеть такие цифры внизу каждой страницы.
02 сентября 2017, 12:06
getResources фильтрует выдачу на основе Resource ACL, т.е не показывает ресурсы, относящиеся к группе ресурсов, к которой текущий юзер не имеет доступа, у pdoResources такой функции к сожалению нет насколько я понимаю…
02 сентября 2017, 13:15
Плохо понимаешь.
В первом же комментарии дан правильный ответ.
В первом же комментарии дан правильный ответ.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Здесь упомянуты:
Компонент | Текущая версия | Закачки |
pdoTools | 2.13.2-pl от 02.09.2021 | 54 258 |
Вчера в 21:11
Здравствуйте
Есть желание использовать компонент polylang для автоматизации перевода с наименьшими усилиями, но есть пару вопросов, которые хотелось ...
Polylang 143
Вчера в 16:30
Добрый день.
Удалите плагин vpSystem от пакета.
[VirtualPage] - Виртуальные страницы. 183
Вчера в 08:40
Хочестя в тикеты при сохранении комментария добавить кнопку «проверить на ошибки» и при нажатии на нее проверить комментарий на ошибки в нейросети сох...
pbStudio: Создаём сайт с PageBlocks – настройка и главная страница 6
Вчера в 08:36
Нет, через апи идет запрос в ChatGPT, который формирует необходимые данные о блоке, а дальше PageBlocks их разбирает и создает все нужные элементы.
PageBlocks 2.6.0. Настройка меню MODX и гибкое управление страницей пользователя 12
Вчера в 00:03
Не работает парсинг с vk.com, vkvideo.ru
[videoGallery] 1.4.0 Поддержка VK Video и ещё пара фишек 9
17 апреля 2025, 23:01
Можете тоже подсказать как победить данную ошибку?
msGallerySearch - загрузка изображений в галерею minishop2 по ссылке и Google поиск картинок 44
17 апреля 2025, 21:35
Действительно! Самого главного я и не обозначил! Спасибо! Поправлю заголовок.
Речь идет именно о панели менеджера и возможности управления заказами.
...
Вывод перечня заказанных товаров в таблицу с заказами minishop2 (панель менеджера) 8
17 апреля 2025, 17:49
Очевидно ты используешь источник файлов, поэтому в админке путь прописан от источника, хочешь полный путь, откажись от источника файлов.
Не открываются загруженные файлы пишет страница не найдена 2
17 апреля 2025, 15:08
Привет, Henk. Спасибо за ответ! В посте по ссылке меня больше всего заинтересовала фраза «мы интегрировали AI в медиа-менеджер, чтобы значительно упро...
MODX/AI Hackathon Part 2 (27 марта) 4
17 апреля 2025, 13:17
в preg_match проверка проходит, и туда 100% приходит url
Здравствуйте! Первый раз такое вижу, у слеша, не 1 символ в строке, а 9!! Как это делает MODX 2