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

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

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

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

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

    Благодарю за внимание.
    1. Александр Мальцев
      Александр Мальцев
      05.11.2017, 07:18
      Это можно осуществить с помощью плагина на событие 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().
  2. Павел
    Павел
    29.10.2017, 18:35
    на свой второй вопрос нашел решение плагином на событие OnDocFormSave:
    Если ресурс-Ticket, то добавляем его в группу Users
    <?php
    if ($modx->event->name == "OnDocFormSave") {
       if ($resource->class_key == 'Ticket'){
           $resource->joinGroup('Users');
       }
    }
    
    с первым вопросом реально запара…