Не дать создать дочерний ресурс у нужных родителей
Еще один вопрос по админке менеджера. Нужно запретить создавать дочерние ресурсы в некоторых разделах (ресурсах) всем кроме админа. Думается, это обычной настройкой прав не решается, что нужен небольшой плагин, надеюсь я ошибаюсь. Прошу кусочек кода (жаль нет событий, чтобы это было до перехода к форме, а то человек всё поля забьет, а потом получит предупреждение при сохранении):
<?php
switch ($modx->event->name) {
case 'OnBeforeDocFormSave':
if (!$modx->user->isMember('Administrator')) {
$modx->event->output('У тебя нет прав, собака, создавать здесь потомков!');
};
break;
}
Комментарии: 8
Я был уверен, что есть такое событие — OnDocFormPrerender. Но раз ты говоришь, что нет, значит нет. )
Ну кули, ночь у меня была во время этой думы, сонный бред) А как всё-таки здесь обозначить конкретные ресурсы, где детей нельзя делать?
Примерно так:
<?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('Ресурс не может быть создан в данном разделе');
//как вариант - можно после алерта редиректить пользователя
}
}
}
}
Попробуйте изменить событие на OnDocFormRender (для корректной отрисовки ошибки).
Урл для редиректа придется формировать самостоятельно:
Как альтернатива — можно с минимальным расширением плагина повесить его помимо OnDocFormRender также и на OnBeforeDocFormSave (чтобы исключить возможность создания документа).
Урл для редиректа придется формировать самостоятельно:
$modx->sendRedirect($modx->getOption('site_url') . 'manager/?a=resource/update&id=' . $parent);
Как альтернатива — можно с минимальным расширением плагина повесить его помимо OnDocFormRender также и на OnBeforeDocFormSave (чтобы исключить возможность создания документа).
Спасибо. Редирект работает. Ошибку правда не показывает в привычном виде (пишет на панели), даже если закомментить редирект, видимо у меня с админкой какие-то проблемы
Вот что в плагине:
Вот что в плагине:
<?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);
}
}
}
}
Для OnBeforeDocFormSave ошибку выводит нормально, в окне.
Можно и через группы ресурсов и 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.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.