Запретить редактировать чужие ресурсы
Задача: Запретить контент менеджеру редактирование чужих статей. Разрешить редактирование своих ресурсов.
Есть несколько вариантов решений, быстрое и правильное.
Ниже опишу быстрый вариант. Правильный вариант можно найти тут
Итак, предположим что у вас уже созданы все необходимые группы, созданы пользователи, им назначены свои права.
Как по итогу оно должно выглядеть
Создаем плагин, называем как угодно, вешаем на 2 события:
OnDocFormPrerender
OnBeforeDocFormSave
Есть несколько вариантов решений, быстрое и правильное.
Ниже опишу быстрый вариант. Правильный вариант можно найти тут
Итак, предположим что у вас уже созданы все необходимые группы, созданы пользователи, им назначены свои права.
Как по итогу оно должно выглядеть
Создаем плагин, называем как угодно, вешаем на 2 события:
OnDocFormPrerender
OnBeforeDocFormSave
<?php
// id текущего пользователя
$user_id = $modx->user->get('id');
switch($modx->event->name) {
// прячем от пользователя контент и показываем ошибку
case 'OnDocFormPrerender':
// Проверка что пользователь является контентщиком, а не админом (админу все можно)
// проверка что ресурс редактируется, а не создание нового
// проверка что пользователь не является создателем ресурса
// ну и проверка на шаблон
if($modx->user->isMember('Content Manager') && $mode == modSystemEvent::MODE_UPD && $resource->get('createdby') != $user_id && $resource->get('template') == 3) {
// html заглушка, можете заверстать свою, это родная
$html = '<div class="modx_error">
<h2><i class="icon icon-exclamation-triangle"></i> Доступ запрещен...</h2>
<div class="error_container"><p>Вы не являетесь автором данной статьи</p></div>
</div>';
// прячем от пользователя панель с кнопками и панель с формой ресурса
$modx->regClientStartupHTMLBlock('
<script type="text/javascript">
Ext.onReady(function() {
var buttons = Ext.getCmp("modx-action-buttons"); // панель кнопок
var resource = Ext.getCmp("modx-panel-resource"); // панель ресурса
buttons.hide();
resource.hide();
});
</script>');
// показываем пользователю ошибку
$modx->event->output($html);
}
break;
// проверяем что пользователь не пытается сохранить чужой ресурс, категорию например или еще что-то
// Проверка что пользователь является контентщиком
// проверка что это не шаблон статьи
// проверяем что пользователь не автор
// ... любое условие на ваш вкус
case 'OnBeforeDocFormSave':
if ($modx->user->isMember('Content Manager') && $resource->get('template') != 3 && $resource->get('createdby') != $user_id) {
$modx->event->output("Вам запрещено редактирование данной страницы");
}
break;
}
Помните, что такая защита является защитой от дураков и призвана только для того, чтобы обычные контентщики не открывали лишнее. Комментарии: 2
В MODX есть «блокировка ресурса», может можно его менять и не нужно элементы скрывать.
Или это не сработает?
Или это не сработает?
По идее должно сработать. В посте не описал задачу полностью, необходимо было скрывать статью полностью. А так даже в голову не пришло использовать этот функционал
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.