В развитие темы ограничения пользователей в создании публичных страниц в GetSimple CMS, я предлагаю также рассмотреть вариант реализации ограничения для пользователей на редактирование и выполнение иных действий с чужими страницами, дополняющий предыдущее решение.
В контексте рассматриваемой темы под чужой страницей я понимаю страницу, созданную другим пользователем GetSimple CMS, чьё имя сохранено в поле страницы authorOriginal
, которое уже было рассмотрено ранее. Исходя из этого, ограничение на редактирование страниц для пользователей принципиально реализуется следующим образом:
- определён пользователь, обладающий правом редактора веб-сайта;
- пользователи, кроме редактора веб-сайта, имеют доступ к редактированию и управлению только теми страницами, в поле
authorOriginal
которых было сохранено их имя; - редактор веб-сайта имеет доступ к редактированию и выполнению иных действий с любой страницей веб-сайта.
Так как рассматриваемый метод является продолжением рассмотренного ранее метода ограничения пользователей в создании публичных страниц, то для продолжения работы, у вас уже должен быть установлен плагин sa hook components, а в файле gsconfig.php
определена постоянная, содержащая имя пользователя, обладающего правами редактора веб-сайта. Так как для установления авторства страниц будет использоваться поле authorOriginal
, в компонентах hook_edit-extras
и hook_changedata-save
должен быть размещён PHP код, реализующий поддержку этого поля данных для страниц.
Теперь следует создать компонент hook_common
, который будет использоваться плагином sa hook components. Разместите в компоненте следующий фрагмент PHP кода, реализующий функции ограничения доступа пользователя к чужим страницам на основании проверки оригинального авторства:
<?php
if (!is_frontend()) {
global $USR;
if (defined('SITEEDITOR')) {
if ($USR !== constant('SITEEDITOR')) {
$filename = get_filename_id();
if ($filename == 'backup-edit' || $filename == 'deletefile' || $filename == 'edit') {
$id = !empty($_GET['id']) ? var_out($_GET['id']) : '';
if ($id) {
$authorOriginal = returnPageField($id, 'authorOriginal');
if (!$authorOriginal || ($authorOriginal && $USR !== $authorOriginal)) {
if ($filename == 'backup-edit') {
redirect('backups.php');
} else {
redirect('pages.php');
}
}
}
}
if ($filename == 'backups') {
if (isset($_GET['deleteall'])) redirect('backups.php');
}
}
}
}
?>
После сохранения компонента и обновления кэша страниц, на вашем веб-сайте начинает работать простая система разграничения доступа к страницам веб-сайта, основанная на определении их авторства: пользователи, кроме редактора веб-сайта, не могут открывать для редактирования, удалять, восстанавливать из резервной копии и удалять резервные копии страниц, не принадлежащие им на праве первоначального авторства. С целью обеспечения дополнительной безопасности содержания веб-сайта, описанные действия со страницами, не имеющими установленного поля authorOriginal
, доступны только для редактора веб-сайта. Кроме того, только редактор веб-сайта имеет право единовременного удаления всех резервных копий страниц.
Таким образом рассмотренное решение предлагает новые возможности по использованию GetSimple CMS в многопользовательском режиме. При необходимости, оно может быть дополнено функциями, управляющими оформлением элементов графического пользовательского веб-интерфейса панели управления, в зависимости от доступности действий для пользователя при работе со страницами веб-сайта.
Корректная работа приведённого решения была проверена на базе чистой инсталляции системы управления контентом GetSimple CMS 3.3.13 и может быть не совместима с рядом плагинов, подменяющих или вносящих значительные изменения в работу стандартных частей системы управления контентом, отвечающих за управление страницами и резервным копированием веб-сайта.