При создании новой странички или ноды на Drupal хотелось бы ограничить доступ к ней. Речь пойдет о наделении такой возможности с помощью модуля Rules.
Несколько слов о модуле Rules. Это своего рода отличное дополнение для CMS Drupal. Если в вашем проекте не хватает логики поведения при различных событиях — попробуйте этот модуль.
Со стороны производительности модуль Rules не значительно подтормаживает работу с базами. Поэтому, если у вас довольно серьезный по ресурсам проект придется писать многое под себя. В моем случае, достаточно сделать тонкую настройку модуля и добавить поле в нужном типе содержимого.
Чтобы сразу отсечь вопросы по аналогичным модулям, типа Content Access, уточню что стоит задача ограничить доступ к определенной странице. В том же Content Access есть возможность управлять доступом к типу «content». То есть, ограничивать доступ пользователям ко всему содержимому сайта или лишить определенным прав (редактирование, удаление).
Теперь, когда мы обсудили задачу и решили каким способ ее выполнить приступим к выполнению.
Для начала нужно поставить модуль Rules. Процесс установки стандартный, как и для всех модулей Drupal, описывать его нет смысла. Все работы ведутся под версию Drupal 7 и следует скачивать модуль той же редакции. Потребуется установить модуль Entity. Ставим и активируем все модули. Убедимся, что они активны:
Перейдем в настройки модуля Config->Process->Rules. В первой вкладке Rules (Правила), создадим новое правило.
Заполняем обязательные поля — название правила, машинное имя. Укажем событие на которое будет срабатывать наше правило — Content is viewed (Просмотр контента). Зададим тип контента — Страница. Сохраняем правило и временно его закрываем.
Чтобы добавить поле перейдем к разделу Structure -> Content type -> Page -> Manage fields. Добавим новое поле «Список(текст)» (List with text), зададим название «Доступ к материалу», машинное имя «field_view_access» и укажем выбор через checkbox (флажки). Жмем сохранить. Откроется окно настройки поля список. Можем здесь указать подсказку — справочный текст. Добавим значения в список:
Следует сделать это поле обязательным и значением по-умолчанию поставить первое значение «Видна всем». Это сэкономит вам время в будущем.
Сохраняем настройки поля и они уже появятся при редактировании «Страниц» сайта, правда не какой логики они не производят. Чтобы данное поле не выводилось в виде текста на страницах, щелкните в том же разделе редактирования типа материала «Страница» -> Управление отображением. Задайте скрытое отображение и никакого текста из нового поля не будет выводится.
Итак, завершающий этап — привязка нашего поля и вывод информации пользователю.
Перейдем, снова, к редактированию нашего правила (см. пункт 1). Добавим кондиции в правило:
1. NOT Text comparison — Говорит что содержимое поля не должно иметь указанное значение. Отрицания можно задавать чекбоксом в самом низу параметров кондиции. Указано поле [field-view-access], а значение 0. То есть, если на странице задан доступ только администраторам, то сработает данная кондиция.
2. AND - Логический оператор, добавляется кнопкой внизу, «Add and». Чтобы он работал, нужно перетащить нужные кондиции в дочерние пункты.
3. NOT User has role(s) - Когда у пользователя нет роли «developer» срабатывает и эта кондиция. Тут все просто.
Теперь что же будет происходить — Actions (Действия):
1. Show a message on the site — Показываем сообщение с классом ошибка, текст указан в параметрах.
2. Page redirect — Простой 301-редирект, чтобы пользователь мог дальше путешествовать по сайту.
Сохраняем наше правило и радуемся.
Жду ваших комментариев.
Всем удачного освоения веб-пространства.
Несколько слов о модуле Rules. Это своего рода отличное дополнение для CMS Drupal. Если в вашем проекте не хватает логики поведения при различных событиях — попробуйте этот модуль.
Со стороны производительности модуль Rules не значительно подтормаживает работу с базами. Поэтому, если у вас довольно серьезный по ресурсам проект придется писать многое под себя. В моем случае, достаточно сделать тонкую настройку модуля и добавить поле в нужном типе содержимого.
Чтобы сразу отсечь вопросы по аналогичным модулям, типа Content Access, уточню что стоит задача ограничить доступ к определенной странице. В том же Content Access есть возможность управлять доступом к типу «content». То есть, ограничивать доступ пользователям ко всему содержимому сайта или лишить определенным прав (редактирование, удаление).
Теперь, когда мы обсудили задачу и решили каким способ ее выполнить приступим к выполнению.
Подготовка — установка модуля
Для начала нужно поставить модуль Rules. Процесс установки стандартный, как и для всех модулей Drupal, описывать его нет смысла. Все работы ведутся под версию Drupal 7 и следует скачивать модуль той же редакции. Потребуется установить модуль Entity. Ставим и активируем все модули. Убедимся, что они активны:
Настройка модуля Rules
Перейдем в настройки модуля Config->Process->Rules. В первой вкладке Rules (Правила), создадим новое правило.
Заполняем обязательные поля — название правила, машинное имя. Укажем событие на которое будет срабатывать наше правило — Content is viewed (Просмотр контента). Зададим тип контента — Страница. Сохраняем правило и временно его закрываем.
Добавление кастомного поля — Доступ к материалу
Чтобы добавить поле перейдем к разделу Structure -> Content type -> Page -> Manage fields. Добавим новое поле «Список(текст)» (List with text), зададим название «Доступ к материалу», машинное имя «field_view_access» и укажем выбор через checkbox (флажки). Жмем сохранить. Откроется окно настройки поля список. Можем здесь указать подсказку — справочный текст. Добавим значения в список:
Следует сделать это поле обязательным и значением по-умолчанию поставить первое значение «Видна всем». Это сэкономит вам время в будущем.
Сохраняем настройки поля и они уже появятся при редактировании «Страниц» сайта, правда не какой логики они не производят. Чтобы данное поле не выводилось в виде текста на страницах, щелкните в том же разделе редактирования типа материала «Страница» -> Управление отображением. Задайте скрытое отображение и никакого текста из нового поля не будет выводится.
Привязка кастомного поля к правилу
Итак, завершающий этап — привязка нашего поля и вывод информации пользователю.
Перейдем, снова, к редактированию нашего правила (см. пункт 1). Добавим кондиции в правило:
1. NOT Text comparison — Говорит что содержимое поля не должно иметь указанное значение. Отрицания можно задавать чекбоксом в самом низу параметров кондиции. Указано поле [field-view-access], а значение 0. То есть, если на странице задан доступ только администраторам, то сработает данная кондиция.
2. AND - Логический оператор, добавляется кнопкой внизу, «Add and». Чтобы он работал, нужно перетащить нужные кондиции в дочерние пункты.
3. NOT User has role(s) - Когда у пользователя нет роли «developer» срабатывает и эта кондиция. Тут все просто.
Теперь что же будет происходить — Actions (Действия):
1. Show a message on the site — Показываем сообщение с классом ошибка, текст указан в параметрах.
2. Page redirect — Простой 301-редирект, чтобы пользователь мог дальше путешествовать по сайту.
Сохраняем наше правило и радуемся.
Жду ваших комментариев.
Всем удачного освоения веб-пространства.
Комментарии (3)
pcmaniac
28.07.2015 14:41А я для этих целей юзаю Taxonomy Access Control.
ИМХО: намного проще и нативней. За нодами, для которых нужно рулить доступ, закреплён соответствующий словарь, а за терминами этого словаря — уровни доступа. Любой пользователь, у которого есть право на изменение привязки терминов этого словаря к ноде, может поменять уровень доступа к ней.
Plazik
Лучше использовать сравнение данных, а не текста.
Его не обязательно ставить, он подразумевается по умолчанию.
Редирект для ограничения доступа как-то не очень хорошо использовать.
silrage Автор
Все верно, сделал для наглядности применения правил данного модуля. С редиректом если и оставлять 403 страницу (Доступ ограничен), лучше использовать таймер перед переходом и вставлять ссылку на страницу перехода. Появится время, надо бы сделать и такое с этим модулем. Спасибо Plazik за комментарий!