dimayakovlev.ru


Ограничение пользователей в доступе к чужим страницам в GetSimple CMS

В развитие темы ограничения пользователей в создании публичных страниц в 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 и может быть не совместима с рядом плагинов, подменяющих или вносящих значительные изменения в работу стандартных частей системы управления контентом, отвечающих за управление страницами и резервным копированием веб-сайта.