Ограничиваем доступ в 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
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Для getTickets тоже прокатило. А с TicketLatest уже не срабатывает.
Тест лишнее. Не работает. Наверно основной класс запроса не Ticket, поэтому не срабатыват. Извиняюсь, лезть в код не стал и точно сказать не могу. Только проверил.