Не дать создать дочерний ресурс у нужных родителей

Еще один вопрос по админке менеджера. Нужно запретить создавать дочерние ресурсы в некоторых разделах (ресурсах) всем кроме админа. Думается, это обычной настройкой прав не решается, что нужен небольшой плагин, надеюсь я ошибаюсь. Прошу кусочек кода (жаль нет событий, чтобы это было до перехода к форме, а то человек всё поля забьет, а потом получит предупреждение при сохранении):
<?php
switch ($modx->event->name) {    
	case 'OnBeforeDocFormSave':
		if (!$modx->user->isMember('Administrator')) { 
			$modx->event->output('У тебя нет прав, собака, создавать здесь потомков!');
		};
	break;
}
Виталий Барышников
09 мая 2016, 09:51
modx.pro
1
1 564
+1

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

Сергей Шлоков
09 мая 2016, 23:10
0
Я был уверен, что есть такое событие — OnDocFormPrerender. Но раз ты говоришь, что нет, значит нет. )
    Виталий Барышников
    10 мая 2016, 02:57
    0
    Ну кули, ночь у меня была во время этой думы, сонный бред) А как всё-таки здесь обозначить конкретные ресурсы, где детей нельзя делать?
      Максим Кузнецов
      10 мая 2016, 04:43
      +1
      Примерно так:
      <?php
      	if ($modx->event->name == "OnDocFormPrerender" && $mode == "new") {
      		if (!$modx->user->isMember('Administrator')) { 
      			if ($parent = intval($_REQUEST['parent'])) {
      				$disallow_parent_list = array(1, 2, 3);
      
      				if (in_array($parent, $disallow_parent_list)) {
      					$modx->event->output('Ресурс не может быть создан в данном разделе');
      					//как вариант - можно после алерта редиректить пользователя
      				}
      			}
      		}
      	}
        Виталий Барышников
        10 мая 2016, 07:16
        0
        Спасибо, почти работает. И сообщение выводит и документ создает)


        Хотел редирект тогда сделать на родителя, но не редиректится:
        $modx->sendRedirect($modx->makeUrl($parent,'mgr','','full'));
          Максим Кузнецов
          10 мая 2016, 13:36
          +1
          Попробуйте изменить событие на OnDocFormRender (для корректной отрисовки ошибки).

          Урл для редиректа придется формировать самостоятельно:
          $modx->sendRedirect($modx->getOption('site_url') . 'manager/?a=resource/update&id=' . $parent);

          Как альтернатива — можно с минимальным расширением плагина повесить его помимо OnDocFormRender также и на OnBeforeDocFormSave (чтобы исключить возможность создания документа).
            Виталий Барышников
            10 мая 2016, 17:21
            0
            Спасибо. Редирект работает. Ошибку правда не показывает в привычном виде (пишет на панели), даже если закомментить редирект, видимо у меня с админкой какие-то проблемы


            Вот что в плагине:
            <?php
            if (($modx->event->name == "OnDocFormRender" || $modx->event->name == "OnBeforeDocFormSave") && $mode == "new") {
            	if (!$modx->user->isMember('Administrator')) { 
            		if ($parent = intval($_REQUEST['parent'])) {
            			$disallow_parent_list = array(2,9);
            
            			if (in_array($parent, $disallow_parent_list)) {
            				$modx->event->output('Вы не можете создавать ресурсы в данном разделе!');
            				//$modx->sendRedirect($modx->getOption('site_url') . 'manager/?a=resource/update&id=' . $parent);
            			}
            		}
            	}
            }
              Виталий Барышников
              10 мая 2016, 17:46
              0
              Для OnBeforeDocFormSave ошибку выводит нормально, в окне.
      Виталий Барышников
      10 мая 2016, 08:25
      0
      Можно и через группы ресурсов и ACL:
      BobRay Reply #10, 3 years, 3 months ago
      You need to put the container resource in another Resource Group (and remove it from the group with the editable resources).

      Leave what you have for the Editable resources.

      Connect the container's Resource Group to the Administrator group with a Resource Group Access ACL entry:

      context: mgr
      policy: Administrator
      minimum role: Super User

      That will hide it. To unhide it, but not allow editing, connect the container's resource Group to the Content Editors Group with another Resource Group Access ACL entry:

      context: mgr
      policy: Load, List, and View
      minimum role: Content Editor

      The container will be visible but not editable and the children should show up.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        8