Как в MODX организовать просмотр tickets только авторам?

Павел
Павел
1,1K
3
Содержание:
  1. Комментарии
Здравствуйте!
1. Буду признателен, если посоветуете, как запретить просмотр тикетов авторизованным пользователям из группы User и разрешить только автору тикета и пользователям из группы Admin.
Всего 2 группы — User и Admin.

2. Буду признателен и за совет — как созданный тикет автоматически добавлять в нужную группу ресурсов?

Спасибо!

Комментарии: 3

  1. Павел
    Павел
    2017-10-29 20:32:24
    пфф… спринт по глобальной сети перед дэдлайном, иногда делает чудеса… не мог найти ни какого решения, именно по этому решил написать вопрос, уже отчаявшись.
    1 свой вопрос решил условным выводом в чанках на Fenom'e (благо, только два шаблона для тикетов)

    {if 0 | ismember : 'Admin'}
     //показываем ресурс админу
    {else}
     {if $_modx->user.id == $_modx->resource.createdby}
     //показываем ресурс, если пользователь не админ, но его автор
     
      {else}
     //показываем сообщение об ошибке доступа 
      {/if}
    
     {/if}
    		
    
    может кому пригодится, а может кто и более лаконичное решение предложит.

    Благодарю за внимание.
  1. Александр Мальцев
    Александр Мальцев
    2017-11-05 07:18:55
    Это можно осуществить с помощью плагина на событие OnWebPageInit.
    Например:
    <?php
    switch ($modx->event->name) {
      case 'OnWebPageInit':
        $resource = $modx->getObject('modResource', $modx->resourceIdentifier);
        if ($resource->get('class_key') === 'Ticket') {
            if (!$modx->user->isMember('Admin') || ($modx->user->id !== $resource->get('createdby'))) {
                $modx->sendErrorPage();
            }
        }
        break;
    }
    
    Т.е. проверяем класс ресурса. Если он равен Ticket, то проверяем группу пользователя и является ли он владельцем. Если это не так, то вызываем метод sendErrorPage().
  • Павел
    Павел
    2017-10-29 18:35:03
    на свой второй вопрос нашел решение плагином на событие OnDocFormSave:
    Если ресурс-Ticket, то добавляем его в группу Users
    <?php
    if ($modx->event->name == "OnDocFormSave") {
       if ($resource->class_key == 'Ticket'){
           $resource->joinGroup('Users');
       }
    }
    
    с первым вопросом реально запара…