Ограничиваем доступ в pdoMenu и Tickets через группы ресурсов
Через группы ресурсов MODX у меня сделано ограничение к разделам сайта. Но так как pdoMenu, по умолчанию, не смотрит в эти группы, то на сайте в меню были видны все разделы. Только в них зайти нельзя было. Наконец-то добрался это поправить. pdoMenu поддерживает добавление своих параметров запросов в SQL. После нескольких попыток, получилось убрать лишнее добавив в вызов pdoMenu:
Upd 21.03.2020 как оказалось в pdoMenu команда &checkPermissions=`list` выполняет нужные функции:
Под катом ограничение для TicketLatest и небольшой пример добавления редактирования групп ресурсов тикета в TicketForm.
Ограничения для TicketLatest :
Правка групп ресурсов через TicketForm.
Для этого нужено:
1) Cниппет вывода групп ресурсов. ticketResourceGroup
2) Чанк ticketResourceGroup
3) Плагин на OnDocFormSave TicketsResGroup
4) На страницу создания-редактирования тикета выводим:
Получилось вот так:
(У меня еще прикручен davidstutz.de/bootstrap-multiselect/)
Мучают меня смутные подозрения, что можно было бы эту задачу решить по другому. Но сейчас ничего такого не приходит в голову :-(.
Upd 21.03.2020 Спасибо @Василий Наумкин подсказал про &checkPermissions=`list`. Но вообще у меня до сих пор сомнения, что вообще задачу надо решать распределяя тикеты по группам ресурсов. Может стоило ввести кучу разделов справка для менеджеров, справка для цеха, но дублировать совпадающие статьи не охота :-(. Интересно есть ли еще решение получше…
Наверно, решение мало кому пригодиться, но, надеюсь, кому-нибудь все-таки пригодиться :-).
Upd 21.03.2020 как оказалось в pdoMenu команда &checkPermissions=`list` выполняет нужные функции:
{'!pdoMenu' | snippet : [
'checkPermissions'='list',
]}
Так же она работает для getTickets. Из нужного такой команды нет только для TicketLatest.Под катом ограничение для TicketLatest и небольшой пример добавления редактирования групп ресурсов тикета в TicketForm.
Ограничения для TicketLatest :
{'!TicketLatest' | snippet : [
'leftJoin'=>[
'modResourceGroupResource'=>[
'class'=>'modResourceGroupResource',
'on'=>'modResourceGroupResource.document = Ticket.id',
],
'modUserGroupMember'=>[
'class'=>'modUserGroupMember',
'on'=>'modUserGroupMember.member = '~$_modx->user.id ~ ' AND modResourceGroupResource.document_group IS NOT NULL',
],
'modAccessResourceGroup'=>[
'class'=>'modAccessResourceGroup',
'on'=>'modResourceGroupResource.document_group = modAccessResourceGroup.target',
],
],
'where'=>[
'(modAccessResourceGroup.principal IS NULL OR modUserGroupMember.user_group = modAccessResourceGroup.principal)',
],
]}
Через тикеты я думаю вести Базу знаний компании. Справку, задачи и проекты программистов. Справка предназначена для разных групп пользователей и какая-то страница должна быть видна всем, а какая-то только одной или двум группам. Писать справку и пользоваться ей удобней через фронт. И назначать группы ресурсов, наверно, лучше через фронт, чтоб не лазить в админку. Правка групп ресурсов через TicketForm.
Для этого нужено:
1) Cниппет вывода групп ресурсов. ticketResourceGroup
2) Чанк ticketResourceGroup
3) Плагин на OnDocFormSave TicketsResGroup
4) На страницу создания-редактирования тикета выводим:
{'!TicketForm' | snippet : ['allowedFields'=>'res_groups']}
5) в чанки tpl.Tickets.form.create и tpl.Tickets.form.update добавляем:<div class="form-group">
<label for="ticket-res_groups">Доступ</label>
{'!ticketResourceGroup' | snippet : []}
<span class="error"></span>
</div>
Сниппет выводит селект с мульти-выбором групп ресурсов и с name=«res_groups». Плагин перехватывает этот параметр и этот тикет добавляет к группам ресурсов и удаляет из них. Получилось вот так:
(У меня еще прикручен davidstutz.de/bootstrap-multiselect/)
Upd 21.03.2020 Спасибо @Василий Наумкин подсказал про &checkPermissions=`list`. Но вообще у меня до сих пор сомнения, что вообще задачу надо решать распределяя тикеты по группам ресурсов. Может стоило ввести кучу разделов справка для менеджеров, справка для цеха, но дублировать совпадающие статьи не охота :-(. Интересно есть ли еще решение получше…
Наверно, решение мало кому пригодиться, но, надеюсь, кому-нибудь все-таки пригодиться :-).
Поблагодарить автора
Отправить деньги
Комментарии: 6
Мучают меня смутные подозрения, что можно было бы эту задачу решить по другому. Но сейчас ничего такого не приходит в голову :-(.
[[!pdoMenu?
&checkPermissions=`list`
]]
Мда… Как то не подумал что list прокатит. Думал надо заводить какие-то отдельные права :-(. Вообщем не сообразил.
Для getTickets тоже прокатило. А с TicketLatest уже не срабатывает.
Для getTickets тоже прокатило. А с TicketLatest уже не срабатывает.
Странно, сниппеты Tickets расширяются общими параметрами pdoTools, куда входит параметр checkPermissions. Должен работать и с TicketLatest.
Блин фиг пойми как заметку переписывать :-(. Сразу логические связки теряются :-). Ладно, надеюсь, комментарии читать будут.
как оказалось в pdoMenu команда &checkPermissions=`list` выполняет нужные функции:Не в pdoMenu. Ты немного в заблуждение вводишь, или сам не разобрался еще. Это единый общий параметр всего семейства pdoTools. Работает во всех сниппетах и, по идее, должен работать во всех компонентах, которые используют в своем ядре класс pdoTools
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.