• MODX

Как в MODX дать просмотр Tickets только авторам?

Здравствуйте!

1) Буду признателен, если посоветуете, как запретить просмотр тикетов авторизованным пользователям из группы User и разрешить только автору тикета и пользователям из группы Admin.

Всего 2 группы - User и Admin.

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

Спасибо!

Ответы: 3

Аноним
Аноним

Пфф... Спринт по глобальной сети перед дэдлайном, иногда делает чудеса... Не мог найти никакого решения, именно по этому решил написать вопрос, уже отчаявшись.

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

Благодарю за внимание.

Аноним
Аноним

Это можно осуществить с помощью плагина на событие 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().

Аноним
Аноним

На свой второй вопрос нашел решение плагином на событие OnDocFormSave:

Если ресурс является Ticket, то добавляем его в группу Users:
<?php
if ($modx->event->name == "OnDocFormSave") {
  if ($resource->class_key == 'Ticket'){
    $resource->joinGroup('Users');
  }
}
С первым вопросом реально запара...