Jump to main content Jump to doc navigation

Введение

В MODX Revolution другая система безопасности: больше гибкости при выдаче (и запрете) доступа к ресурсам Manager и Web. Этот документ помогает войти в основы этой продвинутой схемы.

На front-end часто нужны страницы, которые видят только определённые пользователи. Урок показывает, как сделать это в MODX Revolution. Предполагается, что вы уже умеете регистрировать пользователей и входить через компоненты пакета Login. Описанные шаги не влияют на то, какие ресурсы пользователь видит или правит в MODX Manager.

Если вы уже ориентируетесь, ниже краткий список. Он проведёт по схеме или напомнит порядок. Если нужны подробности и примеры, прокрутите к соответствующим подразделам.

  1. Создайте Resource Group (Security -> Resource Groups -> Create Resource Group)
  2. Привяжите ресурс «только для участников» к Resource Group. (Через редактирование ресурса или перетаскиванием из дерева ресурсов вправо)
  3. Создайте User Group (Security -> Access Controls -> User Groups -> New User Group)
  4. На вкладке Resource Group Access добавьте запись (context: web, minimum role: Member (9999), access policy: Resource)
  5. Добавьте пользователей в группу с ролью Member. (Security -> Manage Users)
  6. Сбросьте права (Security -> Flush Permissions) и проверьте в другом браузере (не просто в другом окне: в другом браузере)

Access Wizard (2.2.2 и новее)

В MODX 2.2.2 есть access wizard, который упрощает процесс. Пошаговое объяснение по-прежнему верно, но wizard сокращает шаги. Имеет смысл прочитать оба варианта, чтобы лучше понять, как части системы безопасности MODX связаны.

1. Создайте Resource Group

Откройте Security -> Resource Groups и нажмите Create Resource Group. Появится окно примерно такое:

Разберём секции:

Section Explanation Tutorial Default
Name Имя создаваемой группы ресурсов. Сделайте его понятным и лёгким для запоминания. Protected
Contexts Контекст, в котором действуют правила. В этом уроке один контекст, "web", и скрывать нужно только там. web
Automatically give Administrator Group Access Если отметить, все пользователи группы administrator по умолчанию получат доступ к группе ресурсов. С 2.2.1 пользователь admin по умолчанию помечен как "sudo" и видит все группы ресурсов независимо от доступа группы administrator. Если есть другие администраторы без sudo и вы хотите, чтобы они видели ресурсы группы, отметьте этот пункт. checked
Automatically give Anonymous Group Access Если отметить, все пользователи группы anonymous получат доступ к группе ресурсов. Посетитель сайта без входа считается в группе anonymous. Мы защищаем страницы от незалогиненных, поэтому в уроке оставляем пункт снятым. unchecked
Create Parallel User Group Не обязательно держать всех, кто видит страницы «только для участников», в группе administrator (если отметили "Automatically give Administrator Group Access"). Можно создать другую группу пользователей с доступом к ресурсам этой группы ресурсов. Отметьте: участники не администраторы. checked
Automatically Give Other User Groups Access Если до урока у вас уже были группы пользователей, которым нужен доступ, перечислите их здесь.

Готово: есть группа ресурсов и группа пользователей. Дальше добавьте ресурсы в группу ресурсов и пользователей в группу пользователей.

2. Добавьте ресурсы в Resource Group

Укажите MODX, какие ресурсы защищать. Оставайтесь на странице из шага 1 (Security > Resource Groups). Справа откройте контекст web, чтобы видеть страницы сайта. Перетащите их из правой колонки в группу ресурсов. Либо откройте каждый ресурс, вкладку Resource Groups и отметьте Access в строке "Protected".

3. Добавьте пользователей в User Group

Со страницей Resource Group закончили. Откройте Security > Access Controls. На вкладке Users Groups виден список групп. Правым кликом по группе "Protected" выберите "Add User to Group". В "Name" выберите пользователя. В Role пока поставьте "Member". Роли задают, что пользователь может внутри группы, но для урока такая тонкость не нужна. Нажмите Save.

Важно: как только вы защитили ресурс, (1) назначив его в одну или несколько групп ресурсов и (2) связав группу ресурсов с группой пользователей через access control, эти страницы перестанут показываться пользователям вне связи с группой ресурсов. Поведение по умолчанию: страница 404. Если нужен ответ 401, группе anonymous нужно разрешение "load" на группу ресурсов. Подробнее в другом уроке. Сейчас ваша страница ещё не видна: вы ещё не добавили её в группу пользователей.

Ресурсы в группе ресурсов, пользователи в группе пользователей. Готово? Нет: осталось несколько мелочей. Если это ваш первый опыт с безопасностью MODX, часто ловят такой момент: у созданной группы пользователей нет context access к front-end контексту web. То есть если бы контекст был доступен, были бы доступны и защищённые ресурсы. Сейчас контекст недоступен. Дайте группе право смотреть этот контекст.

4. Добавьте Context Access группе пользователей

Откройте Security > Access Controls. Правым кликом по защищённой группе выберите "Update user group". Вкладка Context Access. Нажмите "Add Context". Появится диалог как ниже. Разберём:

Section Explanation Tutorial Default
Context Контекст, к которому даёте доступ. Базовый случай: web и mgr. Web это публичный front-end сайта, mgr это закрытый back-end (менеджер, в котором вы вошли). web
Minimum Role К каким ролям применяется правило. Если ко всем в группе, выберите "Member - 9999". Здесь как раз та тонкая настройка, о которой речь выше. Member - 9999
Access Policy Какие разрешения получают пользователи. Разные политики дают группам разные возможности. Administrator

Сделайте одно правило: "web", "Member - 9999" и "Load, List and View". Если нужен вход в менеджер MODX, добавьте второе правило для mgr: "mgr", "Member - 9999" и "Administrator". Тогда у всех этих пользователей будет admin-доступ. Чтобы сузить права, вместо этого выберите "Content Editor" или "Developer". Либо создайте свою политику в Security > Access Policies, если нужно точно задать, что можно и чего нельзя.

Пользователи в группе, ресурсы в группе ресурсов, группа видит контекст. Почти готово.

5. Flush Permissions

Чтобы увидеть изменения, сбросьте, что видят и делают отдельные пользователи. Откройте Security > Flush Permissions. На front-end проверяйте в другом браузере. Около 90% проблем идут от проверки не в другом браузере или от пропуска flush. Не ленитесь открыть второй браузер. Готово: страницы только для участников настроены.

Иногда нужно очистить кэш сайта, особенно для контекста mgr: элементы и ресурсы могут кэшировать права.

Пошаговое объяснение (до 2.2.2)

Если wizard вам меньше подходит или вы хотите понимать, что происходит при каждом праве и access entry, этот раздел полезен. С 2.2.2 в MODX есть Access Wizard, и с него можно начать.

1. Создайте Resource Group

Resource Group это набор ресурсов, который вы связываете с группами пользователей и записями access list. Создав группу, вы легко относите страницы к видимости только для определённых групп или ролей внутри групп.

Чтобы создать группу, откройте Security -> Resource Groups и нажмите Create Resource Group. В окне введите имя. В уроке ожидается имя "Protected".

2. Привяжите ресурс «только для участников» к Resource Group

Группа есть. Добавьте в неё ресурсы. Способов два.

Первый: Security -> Resource Groups и перетащите ресурсы из правого дерева в левые группы ("Protected"). Второй: откройте ресурс и отметьте Access на вкладке Resource Groups.

3. Создайте User Group

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

Откройте Security -> Access Controls. На вкладке User Groups (по умолчанию) нажмите New User Group. Задайте имя группы и отправьте форму.

4. Добавьте доступ к Resource Group

Перейдите на вкладку "Resource Group Access". Здесь задают, к каким группам ресурсов есть доступ у группы пользователей. Три из четырёх полей похожи на Context Access: Context, Minimum Role и Access Policy. Четвёртое: Resource Group. Как ясно из имени, это группа ресурсов, к которой есть доступ.

Настройки:

  • Resource Group: как вы назвали, например "Protected"
  • Context: web
  • Minimum role: Member (9999)
  • Access Policy: Resource

Важно: как только вы защитили ресурс, (1) назначив его в одну или несколько групп ресурсов и (2) связав группу ресурсов с группой пользователей через access control, эти страницы перестанут показываться пользователям вне связи с группой ресурсов. Поведение по умолчанию: страница 404. Если нужен ответ 401, группе anonymous нужно разрешение "load" на группу ресурсов. Подробнее в другом уроке. Сейчас страница ещё не видна: вы ещё не добавили её в группу пользователей.

5. Добавьте пользователей в группу

Добавьте пользователей в группу: через редактирование пользователя или вернувшись на вкладку Users. Спросят User Group и Role. Мы исходили из роли Member с authority 9999, её и используйте.

Если регистрация идёт через websignup snippet, убедитесь, что он сам кладёт пользователей в нужную группу.

6. Flush permissions

Когда настройки готовы, выполните flush permissions (Security -> Flush Permissions), иначе эффекта не будет. На front-end проверяйте целиком в другом браузере. Не другая вкладка и не другое окно: там всё ещё учтут вход в Manager.

Иногда также нужно очистить кэш сайта, особенно для контекста mgr: элементы и ресурсы могут кэшировать права.

Всё ещё не работает?

Пройдите шаги по порядку и убедитесь, что flush permissions выполнен. Если всё кажется верным, проверьте ещё раз и спросите на Forums. Если урок кажется неточным или вводящим в заблуждение, напишите в теме форума (ссылка ниже), что исправить.

Смотрите также

Руководство Bob по правам: http://bobsguides.com/revolution-permissions.html

Тема форума по этому уроку: https://forums.modx.com/index.php/topic,51259.0.html

Базовая зона "Members Only" через Login Snippet: Login.Basic Setup

Безопасность: Security

Support the team building MODX with a monthly donation.

The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.

Backers

  • modmore
  • STERC
  • Digital Penguin
  • Jens Wittmann – Gestaltung & Entwicklung
  • CrewMark
  • Fabian Christen
  • Sepia River Studios
  • Dannevang Digital
  • Alex
  • A. Moreno
  • Chris Fickling
  • Stéphane Jäggi
  • Murray Wood
  • Anton Tarasov
  • deJaya
  • JT Skaggs
  • Lefthandmedia
  • eydolan
  • Following Sea
  • Guido Gallenkamp
  • YJ
  • Raffy
  • Snow Creative
  • Nick Clark
  • Guest
  • Helen
  • krisznet
  • Yanni
  • Richard

Budget

$204 per month—let's make that $500!

Learn more