• MODX

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

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

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

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

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

Спасибо!

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

Павел
Павел
пфф… спринт по глобальной сети перед дэдлайном, иногда делает чудеса… не мог найти ни какого решения, именно по этому решил написать вопрос, уже отчаявшись.
1 свой вопрос решил условным выводом в чанках на 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');
   }
}
с первым вопросом реально запара…