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

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

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

Спасибо!

Комментарии ()

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

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

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