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

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

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

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

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

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

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

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

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

MODX Revolution – Как узнать какие привилегии имеет пользователь
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).
Настройка доступа к группе ресурсов Users для анонимных пользователей
MODX Revolution – Настройка доступа к группе ресурсов Users для анонимных пользователей

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

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

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

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

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

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

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

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

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

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

MODX - Связывание источника файлов Filesystem с группой 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.

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