MODX - Настройка прав доступа

Александр Мальцев
Александр Мальцев
21K
23
Содержание:
  1. Система прав доступа в MODX
  2. Как создать свою политику доступа
  3. Анонимный пользователь
  4. Типовые инструкции по настройке разрешений
  5. Комментарии

Статья, в которой рассмотрим, как в MODX Revolution организована система прав доступа, а также некоторые типовые инструкции по настройки разрешений для пользователей.

MODX Revolution - Настройка прав доступа

Система прав доступа в MODX

MODX Revolution не позволяет напрямую назначать права пользователю. В этой системе данное действие осуществляется через группы пользователей.

Другими словами, для того чтобы пользователю предоставить некоторые права, необходимо:

  • создать группу и назначить ей нужные привилегии;
  • поместить одного или нескольких пользователей в эту группу.

Но нахождения пользователя в группе не означает то, что он получит все её привилегии. Права, которые получит пользователь, будут определяться с помощью отведённой ему в этой группе роли. Роль (ранг) пользователя в группе определяется с помощью числа от 0 до 9999. Это значение определяет, какие пользователь получит привилегии группы, а какие нет.

Другими словами роль – это некий механизм, который позволяет в пределах одной группы разным пользователям назначить разные права.

Разберём небольшой пример.

MODX Revolution – Как узнать какие привилегии имеет пользователь

В этом примере:

  • Пользователь User1 принадлежит к группе Group1. Он имеет те привилегии группы, роль которых больше 2000.
  • Пользователь User2 состоит в 2 группах. Он имеет привилегии 2 групп. От первой группы (Group1) он имеет те привилегии, роль которых больше или равно 1000. А от второй (Group2) - те привилегии, роль которых больше или равно 9999.
  • Пользователь User3 находится в группе Group2. Эта группа даёт ему те права, роль которых больше или равно 5000.

Политика доступа в MODX

Установление привилегий группе в MODX Revolution осуществляется с помощью политики доступа. Она (политика доступа) назначаются группе применительно к определённым сущностям MODX, а именно к контексту, группе ресурсов, категории элементов, источнику файлов и пространству имён. Кроме этого указывается ещё минимальная роль, которая нужна пользователю этой группы, чтобы иметь эти привилегии.

Рассмотрим изображение.

MODX Revolution – Привилегии, которые получают пользователи группы, в зависимости от того, какую роль каждый из них играет в ней

В этом примере:

  • Пользователь User1 (роль в группе Group1 - 2000) имеет все привилегии группы Group1, роль которых больше или равно 2000. Т.е. это К1, К2 и Г2.
  • Пользователь User2 имеет самую высокую роль в группе (0) и, следовательно, все её привилегии (К1, К2, Г1 и Г2).
  • Пользователь User3 имеет в группе Group1 самую низкую роль (9999). В соответствии с ней он может совершать действия в системе, определённые в К2 и Г2.

Политика доступа – это набор прав, предоставляемый пользователю для совершения действий на сайте, работающем под управлением CMS MODX Revolution.

Почему это реализовано именно так? Это связано с тем, что прав в MODX очень много и их более удобно назначать группами (другими словами с помощью политики доступа), а не по одному.

Например, политика доступа Load, List and View имеет следующий набор разрешений:

  • load (загружать объекты);
  • list (получать коллекцию объектов);
  • view (просмотр объектов).

Как создать свою политику доступа

При установке разрешений группе пользователей вы не ограничены только существующими (предустановленными) в системе MODX политиками. При необходимости вы можете создать новые. Создание политики в MODX осуществляется на основании шаблона политики доступа. Шаблон политики доступа – это сущность MODX Revolution, которая определяет максимальный список разрешений, доступный при создании политики доступа.

Таким образом, для того чтобы создать политику доступа с нужными разрешениями необходимо:

  1. Найти подходящий шаблон политики доступа (при необходимости отредактировать существующий или создать новый).
  2. Создать политику доступа, выбрав подходящий шаблон.
  3. Включить из всего списка разрешений, предлагаемый шаблоном, только те, которые вы хотите предоставить пользователям (если они будут иметь эту политику).
MODX Revolution – Как определяется набор доступных разрешений, доступных для включения в политике доступа

При создании политики доступа, всегда начинайте с назначения минимального количества прав, достаточных пользователю для совершения определённых действий в системе. При необходимости вы всегда сможете расширить предоставляемые пользователю разрешения.

Анонимный пользователь

В MODX Revolution любой не авторизированный посетитель сайта является анонимным и принадлежит к группе (аноним). В этом легко убедится, если создать следующий сниппет, поместить его вызов в шаблон ресурса, а затем открыть страницу.

Php код сниппета GetUser:

<?php
return $modx->user->get('username');

Вызов сниппета на странице:

[[!GetUser]]

Результат работы:

(anonymous)

Действия анонимных пользователей на сайте в MODX регулируются посредством настройки разрешений группы (аноним). При необходимости вы можете этой группе дать дополнительные привилегии или ограничить их.

Типовые инструкции по настройке разрешений

В этом разделе рассмотрим инструкции, которые можно использовать, когда вам необходимо:

  • ограничить доступ к определённым ресурсам для анонимных пользователей;
  • создать контент менеджера, которому необходимо дать доступ для работы с ресурсами в админке, а также возможность загружать картинки.

Ограничение доступа к определённым ресурсам

Рассмотрим пример, в котором ограничим доступ анонимным пользователям к определённым ресурсам (например, к личному кабинету, к странице «Изменения пароля» и т.п.). Доступ к этим ресурсам предоставим только зарегистрированным пользователям.

Чтобы это осуществить необходимо:

  1. Создать группу ресурсов Users (Содержимое -> Группы ресурсов -> кнопка «Создать группу ресурсов»). В появившейся форме ввести в поле «Имя» - Users и нажать на кнопку «Сохранить». Поместить в неё нужные ресурсы (доступ, к которым необходимо ограничить для анонимных посетителей).
  2. Создать группу пользователей Users (Иконка «Шестерёнка» -> Контроль доступа -> кнопка «Новая группа пользователей»). В открывшемся диалоговом окне ввести в поле «Имя» - Users, «Контексты» - web, «Политики бэкэнда» - (нет политики).
  3. Перейти в режим редактирования группы (в контекстном меню Users выбрать пункт «Редактировать группу пользователей»).
  4. Открыть вкладку «Права доступа», а в ней «Доступ к группам ресурсам». Нажать на кнопку «Добавить группу ресурсов» и заполнить открывшуюся форму («Группа ресурсов» - Group, «Контекст» - (web), Минимальная роль – Member (9999), «Политика доступа» – Load, List and View).

После этого, любой анонимный или другой пользователь (у которого нет прав) получит 404 ресурс (т.к. у него нет даже права load), если он попытается открыть какую-ту страницу из этой группы.

Если же вы хотите анонимных пользователей, при открытии защищённых страниц, пересылать на какую-то другую (например, авторизации), то необходимо выполнить дополнительно ещё следующее (а именно дать право load для этой группы ресурсов):

  1. Открыть системные настройки (иконка «Шестерёнка» -> Системные настройки). Выбрать пространство имён «core», раздел «Сайт». Найти параметр unauthorized_page (Страница ошибки 403 «Доступ запрещен») и указать ему в качестве значение - id ресурса, содержащего форму «Авторизации».
  2. Перейти в режим редактирования группы (аноним). В разделе «Доступ к группам ресурсам» (вкладка «Права доступа») добавить группу ресурсов Users и выставить ей необходимые права (в данном случае «Контекст» - (web), Минимальная роль – Member (9999), «Политика доступа» – Load Only).
MODX Revolution – Настройка доступа к группе ресурсов Users для анонимных пользователей

Настройка прав для контент менеджера

В этом примере создадим группу «Managers», пользователи которой смогут в админке загружать изображения в директорию и работать с определёнными ресурсами.

Чтобы это осуществить можно, например, воспользоваться следующей инструкцией:

1. Создать новую политику доступа Manager с необходимыми правами:

  • Открыть страницу «Контроль доступа» (иконка «Шестерёнка» -> Контроль доступа) и перейти на вкладку «Политика доступа».
  • Сделать копию политики «Content Editor».
  • Отредактировать созданную копию, а именно изменить поле имя на Manager и установить галочки напротив прав directory_list, file_list, file_manager, file_remove, file_tree, file_upload. В итоге политика доступа Manager будет иметь 30 разрешений. Это необходимо сделать для того, чтобы пользователю предоставить права для работы с файлами.
  • Нажать на кнопку «Сохранить».
MODX Revolution – Форма настройки политики доступа Manager

2. Скрыть ресурсы, к которым менеджеры не должны иметь доступ в админке:

  • Открыть страницу «Группы ресурсов» и нажать на кнопку «Создать группу ресурсов».
  • В открывшейся форме ввести в «Имя» - ClosedForManagers, «Контексты» - mgr и отметить опцию «Автоматически дать доступ группе Administrator».
  • Кликнуть на кнопку «Сохранить».
  • Перетащить в созданную группу ресурсы, которые необходимо скрыть для менеджеров в админке.

3. Предоставить доступ к директории, в которую пользователь будет загружать картинки.

  • Открыть страницу «Источники файлов», кликнуть по кнопке «Создать новый источник файлов».
  • В открывшейся форме ввести в поле «Имя» текст Images, в «Описание» - Изображения, в «Тип источника файлов» - Файловая система.
  • Нажать на кнопку «Сохранить».
  • Отредактировать только что созданный источник файлов (правая кнопка мыши -> действие «Редактировать»).
  • Изменить значение параметров: basePath – assets/images/, baseUrl – assets/images/, allowedFileTypes - jpg, jpeg, png, gif.
  • Кликнуть по кнопке «Сохранить».
MODX Revolution – Настройка источника файлов Images

Источник файлов, не имеющий связанной с ним группы пользователей, будет доступен всем пользователем бэкэнда. Поэтому чтобы для пользователей группы Managers не показывались другие источники файлов, которые не связаны не с одной группы, их, например, можно назначить группе пользователей Administrator.

MODX Revolution – Связывание источника файлов Filesystem с группой Administrator

Система разграничения доступа MODX при помощи источника файлов позволяет различным пользователям задать определённые каталоги, к которым они будут иметь доступ, а также определить набор их привилегий в них. Другими словами - это система, которая с помощью которой, например, одним пользователям можно дать одни каталоги, а другим - другие.

4. Создать новую группу пользователей и назначить ей необходимые права.

  • Открыть страницу «Контроль доступа», перейти на вкладку «Группы пользователей & Пользователи», нажать на кнопку «Новая группа пользователей».
  • В открывшемся диалоговом окне заполнить следующие поля: «Имя» - Managers; «Описание» - Менеджеры; «Контексты» - web, mgr; «Политика бэкэнда» - Manager.
  • Нажать на кнопку «Сохранить».
  • Перейти в режим редактирования только что созданной группы пользователей «Managers» (нажать правой кнопкой мыши на группе -> пункт в контекстном меню «Редактировать»).
  • Перейти на вкладку «Права доступа».
  • Открыть раздел «Доступ к контекстам». Доступ контексту web: «Минимальная роль» - Member (9999); Политика доступа – Load, List and View. Доступ к контексту mgr: «Минимальная роль» - Member (9999), Политика доступа – Manager.
  • В разделе «Доступ к источнику файлов» добавим новую запись, имеющую следующие значения: «Источник» - Images; «Минимальная роль» - Member (9999), «Политика доступа» – Media Source Admin.
  • Нажать на кнопку «Сохранить»

5. Создать пользователя и добавить его в группу «Manager». В качестве значения роли установить ему число 9999 (Member). Данной роли ему будет достаточно, чтобы получить все разрешения данной группы. Это связано с тем, что для этой группы мы не назначали политики доступа для которых потребовалось бы роль больше чем 9999.

MODX Revolution – Добавление пользователя в группу Manager (роль Member)

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

  1. Демьян Золин
    29.01.2021, 10:22
    Modx Revo. Не могу войти в админку. Несколько месяцев не заходил. Здравствуйте. Где об этом прочитать?
    1. Александр Мальцев
      30.01.2021, 16:34
      Здравствуйте. Что конкретно «говорит»?
      1. Демьян Золин
        31.01.2021, 00:08
        Пользователь с таким адресом электронной почты или именем не найден. Пожалуйста, попробуйте ещё раз.
        1. Александр Мальцев
          31.01.2021, 11:16
          Удалите кеш (содержимое каталога /core/cache/) и попробуйте зайти снова. Это можно осуществить через файловый менеджер в панели управления хостингом или по FTP.

          Если не поможет, то посмотрите какое сейчас у вас имя в БД. Все пользователи находятся в таблице users. Обычно у администратора id равен 1. Для этого откройте базу данных, используя phpMyAdmin доступный через панель управления хостингом. Найдите эту строчку и измените значение username на своё. Далее проделайте аналогичные действия в таблице user_attributes, только в ней замените email на свой. После этого при входе в админку нажмите на ссылку «Забыли своё имя пользователя?» и восстановите свой аккаунт.
          1. Демьян Золин
            31.01.2021, 13:34
            Удалил, сайт не доступен
            1. Александр Мальцев
              31.01.2021, 13:55
              Сайт по https был? Может срок действия сертификата истёк.
              1. Демьян Золин
                31.01.2021, 18:22
                Нет. Забил, сделаю просто визитку.
    2. Amsterdam
      23.03.2020, 09:41
      Доброго дня Александр!

      А возможно ли разрешить доступ к каталогу на сервере, если пользователь залогинен в системе и пытается зайти в папку с ftp браузера? Например, папка core закрыта от доступа из вне, но если пользователь залогинен в админке, то позволить просматривать в этом браузере папку core?
      1. Александр Мальцев
        02.04.2020, 15:18
        Добрый день! Доступ по ftp к файлам сервера настраивается через хостинг, там можно создать нового пользователя с определённым именем и паролем.
      2. Макс
        15.02.2020, 22:41
        Доброго времени суток!
        Сделал всё по пунктам но когда захожу в сайт/manager и ввожу имя/пароль менеджера мне пишется «Доступ запрещен»
        В чём может быть проблема?
        1. Александр Мальцев
          16.02.2020, 16:01
          Привет! Попробуй перезагрузить права доступа и очистить кэш.
        2. Vasily
          25.01.2019, 16:45
          Пробую в файле /public_html/manager/templates/default/resource/update.tpl прописать функцию, чтобы если id пользователя больше чем 29 показывать вместо контента: Привет, Андрей
          вместо
          {$onDocFormPrerender}
          {if $resource->richtext AND $_config.use_editor}
                  {$onRichTextEditorInit}
          {/if}
          заменить на
          {$onDocFormPrerender}
          {if $resource->richtext AND $_config.use_editor}
              {if $_modx->user.id > 29}
                  Привет, {$_modx->user.fullname}!
              {else}
                  {$onRichTextEditorInit}
              {/if}
          {/if}
          но не сработало
          PS: Fenom in System: pdotools_fenom_default = true : else = false

          Есть какой-то вариант скрыть поле редактировать *content от пользователя группы менеджер? Или же плагин?
          1. Александр Мальцев
            27.01.2019, 16:46
            Посмотрите ответ в этом комментарии.
          2. Alex
            03.01.2019, 03:15
            Александр, возможно ли с помощью политик доступа дать возможность менеджеру добавлять пользователей только в определённую группу, не показывая участников других групп?
            1. Дмитрий
              03.08.2018, 14:32
              Здравствуйте. Удалил группу пользователей. она исчезла из списка групп, но когда пытаюсь создать такую же с тем же именем — говорит, что такая группа уже существует…
              1. Александр Мальцев
                04.08.2018, 08:41
                Здравствуйте. Не знаю, не сталкивался с такой проблемой.
              2. Василий
                23.11.2017, 13:32
                Здравствуйте!
                А как настроить индивидуализированное верхнее меню бэкенда для контент-менеджеров? Убрать какие-то пункты, поменять структуру?
                1. Александр Мальцев
                  23.11.2017, 15:32
                  Здравствуйте!
                  Это управляется с помощью разрешений menu_reports, menu_security, menu_site, menu_support и др.
                  Само меню настраивается на странице Меню (Значок «шестерёнка» ->Меню). При редактировании пункта меню, в нём есть поле «Привилегии». Здесь вы можете указать ключ привилегии. Затем этот ключ (разрешение) дать определённым группам.
                  1. Amsterdam
                    19.04.2018, 16:15
                    А где указать разрешения конкретно? Не подскажете? Что то не доходит…
                    1. Александр Мальцев
                      20.04.2018, 15:40
                      Небольшой пример работы с правами.
                      Шестеренка -> Контроль доступа.
                      На странице:
                      • создаём шаблон политики доступа ManagerTemplate копированием AdministratorTemplate;
                      • создаём политику доступа Manager, используя шаблон ManagerTemplate.
                      Далее Шестеренка -> Меню. В открывшейся странице, например, установим привилегии для пункта MIGX. Нажимаем на него правой кнопкой мыши -> Редактировать. Вводим в поле Привилегии значение menu_migx.

                      Открываем шаблон политики доступа ManagerTemplate и добавляем разрешение menu_migx. После этого открываем политику доступа Manager и устанавливаем галочку напротив пункта menu_migx.

                      Создаём новую группу пользователей, например, Managers. Открываем вкладку Права доступа. На ней доступ к контекстам. Нажимаем на кнопку «Добавить контекст». В поле контекст устанавливаем mgr, минимальная роль9999, политика доступаManager.

                      Создаём нового пользователя и помещаем его в эту группу и назначаем ему роль 9999.

                      Теперь после входа в админку данный пользователь будет иметь доступ к меню MIGX.

                      А если теперь зайти в политику доступа Manager и убрать галочку напротив привилегии menu_migx, то пользователь не будет иметь доступ к меню MIGX.

                      Кроме этого, чтобы права вступили в силу, возможно, потребуется выполнить действие: Управление -> Перезагрузить права доступа.
                      1. Владимир
                        13.06.2018, 10:17
                        Ввел в поле привилегии свое значение menu_clientconfig, а в шаблоне доступа этого значения нет
                        1. Александр Мальцев
                          13.06.2018, 14:05
                          Необходимо в Шаблоне политики доступа нажать на кнопку «Добавить разрешение». После этого в диалоговом окне «Добавить разрешение» ввести это имя и при необходимости описание.
                    2. Василий
                      23.11.2017, 15:40
                      Благодарю! А то никак не разберешься. И на англоязычном сайте с документацией не нашел.
                  Войдите, пожалуйста, в аккаунт, чтобы оставить комментарий.