MODX - Настройка прав доступа
Статья, в которой рассмотрим, как в MODX Revolution организована система прав доступа, а также некоторые типовые инструкции по настройки разрешений для пользователей.
Система прав доступа в MODX
MODX Revolution не позволяет напрямую назначать права пользователю. В этой системе данное действие осуществляется через группы пользователей.
Другими словами, для того чтобы пользователю предоставить некоторые права, необходимо:
- создать группу и назначить ей нужные привилегии;
- поместить одного или нескольких пользователей в эту группу.
Но нахождения пользователя в группе не означает то, что он получит все её привилегии. Права, которые получит пользователь, будут определяться с помощью отведённой ему в этой группе роли. Роль (ранг) пользователя в группе определяется с помощью числа от 0 до 9999. Это значение определяет, какие пользователь получит привилегии группы, а какие нет.
Другими словами роль – это некий механизм, который позволяет в пределах одной группы разным пользователям назначить разные права.
Разберём небольшой пример.
В этом примере:
- Пользователь User1 принадлежит к группе Group1. Он имеет те привилегии группы, роль которых больше 2000.
- Пользователь User2 состоит в 2 группах. Он имеет привилегии 2 групп. От первой группы (Group1) он имеет те привилегии, роль которых больше или равно 1000. А от второй (Group2) - те привилегии, роль которых больше или равно 9999.
- Пользователь User3 находится в группе Group2. Эта группа даёт ему те права, роль которых больше или равно 5000.
Политика доступа в MODX
Установление привилегий группе в MODX Revolution осуществляется с помощью политики доступа. Она (политика доступа) назначаются группе применительно к определённым сущностям MODX, а именно к контексту, группе ресурсов, категории элементов, источнику файлов и пространству имён. Кроме этого указывается ещё минимальная роль, которая нужна пользователю этой группы, чтобы иметь эти привилегии.
Рассмотрим изображение.
В этом примере:
- Пользователь 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, которая определяет максимальный список разрешений, доступный при создании политики доступа.
Таким образом, для того чтобы создать политику доступа с нужными разрешениями необходимо:
- Найти подходящий шаблон политики доступа (при необходимости отредактировать существующий или создать новый).
- Создать политику доступа, выбрав подходящий шаблон.
- Включить из всего списка разрешений, предлагаемый шаблоном, только те, которые вы хотите предоставить пользователям (если они будут иметь эту политику).
При создании политики доступа, всегда начинайте с назначения минимального количества прав, достаточных пользователю для совершения определённых действий в системе. При необходимости вы всегда сможете расширить предоставляемые пользователю разрешения.
Анонимный пользователь
В MODX Revolution любой не авторизированный посетитель сайта является анонимным и принадлежит к группе (аноним). В этом легко убедится, если создать следующий сниппет, поместить его вызов в шаблон ресурса, а затем открыть страницу.
Php код сниппета GetUser:
<?php return $modx->user->get('username');
Вызов сниппета на странице:
[[!GetUser]]
Результат работы:
(anonymous)
Действия анонимных пользователей на сайте в MODX регулируются посредством настройки разрешений группы (аноним). При необходимости вы можете этой группе дать дополнительные привилегии или ограничить их.
Типовые инструкции по настройке разрешений
В этом разделе рассмотрим инструкции, которые можно использовать, когда вам необходимо:
- ограничить доступ к определённым ресурсам для анонимных пользователей;
- создать контент менеджера, которому необходимо дать доступ для работы с ресурсами в админке, а также возможность загружать картинки.
Ограничение доступа к определённым ресурсам
Рассмотрим пример, в котором ограничим доступ анонимным пользователям к определённым ресурсам (например, к личному кабинету, к странице «Изменения пароля» и т.п.). Доступ к этим ресурсам предоставим только зарегистрированным пользователям.
Чтобы это осуществить необходимо:
- Создать группу ресурсов Users (Содержимое -> Группы ресурсов -> кнопка «Создать группу ресурсов»). В появившейся форме ввести в поле «Имя» - Users и нажать на кнопку «Сохранить». Поместить в неё нужные ресурсы (доступ, к которым необходимо ограничить для анонимных посетителей).
- Создать группу пользователей Users (Иконка «Шестерёнка» -> Контроль доступа -> кнопка «Новая группа пользователей»). В открывшемся диалоговом окне ввести в поле «Имя» - Users, «Контексты» - web, «Политики бэкэнда» - (нет политики).
- Перейти в режим редактирования группы (в контекстном меню Users выбрать пункт «Редактировать группу пользователей»).
- Открыть вкладку «Права доступа», а в ней «Доступ к группам ресурсам». Нажать на кнопку «Добавить группу ресурсов» и заполнить открывшуюся форму («Группа ресурсов» - Group, «Контекст» - (web), Минимальная роль – Member (9999), «Политика доступа» – Load, List and View).
После этого, любой анонимный или другой пользователь (у которого нет прав) получит 404 ресурс (т.к. у него нет даже права load), если он попытается открыть какую-ту страницу из этой группы.
Если же вы хотите анонимных пользователей, при открытии защищённых страниц, пересылать на какую-то другую (например, авторизации), то необходимо выполнить дополнительно ещё следующее (а именно дать право load для этой группы ресурсов):
- Открыть системные настройки (иконка «Шестерёнка» -> Системные настройки). Выбрать пространство имён «core», раздел «Сайт». Найти параметр unauthorized_page (Страница ошибки 403 «Доступ запрещен») и указать ему в качестве значение - id ресурса, содержащего форму «Авторизации».
- Перейти в режим редактирования группы (аноним). В разделе «Доступ к группам ресурсам» (вкладка «Права доступа») добавить группу ресурсов Users и выставить ей необходимые права (в данном случае «Контекст» - (web), Минимальная роль – Member (9999), «Политика доступа» – Load Only).
Настройка прав для контент менеджера
В этом примере создадим группу «Managers», пользователи которой смогут в админке загружать изображения в директорию и работать с определёнными ресурсами.
Чтобы это осуществить можно, например, воспользоваться следующей инструкцией:
1. Создать новую политику доступа Manager с необходимыми правами:
- Открыть страницу «Контроль доступа» (иконка «Шестерёнка» -> Контроль доступа) и перейти на вкладку «Политика доступа».
- Сделать копию политики «Content Editor».
- Отредактировать созданную копию, а именно изменить поле имя на Manager и установить галочки напротив прав directory_list, file_list, file_manager, file_remove, file_tree, file_upload. В итоге политика доступа Manager будет иметь 30 разрешений. Это необходимо сделать для того, чтобы пользователю предоставить права для работы с файлами.
- Нажать на кнопку «Сохранить».
2. Скрыть ресурсы, к которым менеджеры не должны иметь доступ в админке:
- Открыть страницу «Группы ресурсов» и нажать на кнопку «Создать группу ресурсов».
- В открывшейся форме ввести в «Имя» - ClosedForManagers, «Контексты» - mgr и отметить опцию «Автоматически дать доступ группе Administrator».
- Кликнуть на кнопку «Сохранить».
- Перетащить в созданную группу ресурсы, которые необходимо скрыть для менеджеров в админке.
3. Предоставить доступ к директории, в которую пользователь будет загружать картинки.
- Открыть страницу «Источники файлов», кликнуть по кнопке «Создать новый источник файлов».
- В открывшейся форме ввести в поле «Имя» текст Images, в «Описание» - Изображения, в «Тип источника файлов» - Файловая система.
- Нажать на кнопку «Сохранить».
- Отредактировать только что созданный источник файлов (правая кнопка мыши -> действие «Редактировать»).
- Изменить значение параметров: basePath – assets/images/, baseUrl – assets/images/, allowedFileTypes - jpg, jpeg, png, gif.
- Кликнуть по кнопке «Сохранить».
Источник файлов, не имеющий связанной с ним группы пользователей, будет доступен всем пользователем бэкэнда. Поэтому чтобы для пользователей группы Managers не показывались другие источники файлов, которые не связаны не с одной группы, их, например, можно назначить группе пользователей 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.
Т.е. ставил права доступа на уже работающем сайте, в личном кабинете пользователь может создавать и редактировать ресурсы, видит списки папок и файлов с картинками и видео, но если перейти в раздел управление медиа (верхнее меню) — то там пусто. добавить свои тоже нельзя.
Где чего еще поправить?
— в данных ТВ поля также изменил источник данных с Filesystem на images
С одной стороны все заработало, вот только уже добавленные картинки он отображать не хочет. мол надо по новой ручками добавить тогда показываются
Если не поможет, то посмотрите какое сейчас у вас имя в БД. Все пользователи находятся в таблице users. Обычно у администратора id равен 1. Для этого откройте базу данных, используя phpMyAdmin доступный через панель управления хостингом. Найдите эту строчку и измените значение username на своё. Далее проделайте аналогичные действия в таблице user_attributes, только в ней замените email на свой. После этого при входе в админку нажмите на ссылку «Забыли своё имя пользователя?» и восстановите свой аккаунт.
А возможно ли разрешить доступ к каталогу на сервере, если пользователь залогинен в системе и пытается зайти в папку с ftp браузера? Например, папка core закрыта от доступа из вне, но если пользователь залогинен в админке, то позволить просматривать в этом браузере папку core?
Сделал всё по пунктам но когда захожу в сайт/manager и ввожу имя/пароль менеджера мне пишется «Доступ запрещен»
В чём может быть проблема?
вместо
заменить на
но не сработало
PS: Fenom in System: pdotools_fenom_default = true : else = false
Есть какой-то вариант скрыть поле редактировать *content от пользователя группы менеджер? Или же плагин?
А как настроить индивидуализированное верхнее меню бэкенда для контент-менеджеров? Убрать какие-то пункты, поменять структуру?
Это управляется с помощью разрешений menu_reports, menu_security, menu_site, menu_support и др.
Само меню настраивается на странице Меню (Значок «шестерёнка» ->Меню). При редактировании пункта меню, в нём есть поле «Привилегии». Здесь вы можете указать ключ привилегии. Затем этот ключ (разрешение) дать определённым группам.
Шестеренка -> Контроль доступа.
На странице:
- создаём шаблон политики доступа ManagerTemplate копированием AdministratorTemplate;
- создаём политику доступа Manager, используя шаблон ManagerTemplate.
Далее Шестеренка -> Меню. В открывшейся странице, например, установим привилегии для пункта MIGX. Нажимаем на него правой кнопкой мыши -> Редактировать. Вводим в поле Привилегии значение menu_migx.Открываем шаблон политики доступа ManagerTemplate и добавляем разрешение menu_migx. После этого открываем политику доступа Manager и устанавливаем галочку напротив пункта menu_migx.
Создаём новую группу пользователей, например, Managers. Открываем вкладку Права доступа. На ней доступ к контекстам. Нажимаем на кнопку «Добавить контекст». В поле контекст устанавливаем mgr, минимальная роль — 9999, политика доступа — Manager.
Создаём нового пользователя и помещаем его в эту группу и назначаем ему роль 9999.
Теперь после входа в админку данный пользователь будет иметь доступ к меню MIGX.
А если теперь зайти в политику доступа Manager и убрать галочку напротив привилегии menu_migx, то пользователь не будет иметь доступ к меню MIGX.
Кроме этого, чтобы права вступили в силу, возможно, потребуется выполнить действие: Управление -> Перезагрузить права доступа.