Раздел Drupal доступен по ролям - PullRequest
1 голос
/ 16 ноября 2009

Мне нужно ограничить доступ к контенту на сайте Drupal на основе роли пользователя Drupal.

http://site.com/managers/intro

http://site.com/managers/reviews

http://site.com/managers/up-for-raises

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

Я могу заставить все узлы / представления жить по этим адресам с помощью настроек меню при их создании, но я не знаю, как ограничить доступ с помощью роли, отличной от набора функций предварительной обработки в template.php, но кажется, это неправильный способ сделать это.

Я искал модуль и спросил о # drupal-support IRC, но не было найдено никаких результатов, в которых роли drupal используются в качестве ограничивающего фактора.

Ответы [ 4 ]

4 голосов
/ 05 февраля 2010

Хотя это старый вопрос, модуль Path Access делает именно это сейчас. Вот выдержка из его страницы проекта:

... предоставляет администраторам сайта дополнительный уровень контроля доступа ко всем страницам сайта Drupal.

Преимущества: Хотя многие модули Drupal предоставляют некоторую степень разрешений контроля доступа, они никогда не покрывают все возможные требования пользователей. Path_access предоставляет средства для ограничения страниц на основе их псевдонима пути. Это означает, что вы можете заблокировать определенные группы ролей пользователей из целых разделов сайта с помощью подстановочных знаков.

2 голосов
/ 16 ноября 2009

Мне кажется, что если в этом разделе всегда будут присутствовать «менеджеры», вы могли бы написать небольшой модуль, который использует hook_init, чтобы в основном сказать, не является ли роль текущего пользователя одной из ролей, а URL содержит "/ manager /", затем drupal_goto () страница входа в систему.

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

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

1 голос
/ 16 ноября 2009

Если я правильно понял, то, что вы пытаетесь добиться, - это иметь доступ только к определенным ролям на страницах, расположенных по указанному URL.

ИСПОЛЬЗОВАНИЕМ МОДУЛЯ ДОСТУПА К КОНТРИБУ

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

ИСПОЛЬЗУЯ ФЛАГ + ВИДЫ

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

  1. Создайте три флага, которые вы можете использовать, чтобы пометить контент (любой тип контента!), Который необходимо будет просмотреть по любому из адресов, указанных вами в вашем вопросе (например: создайте флаг «intro», который вы будете использовать используется для отметки узлов, которые должны отображаться на странице "/ mangers / intro")
  2. Создайте 3 представления (по одному на каждый адрес, указанный в вашем вопросе), которые будут извлекать из БД нужные вам узлы, фильтруя их на основе вашего флага.
  3. Установите разрешение этих представлений в соответствии с ролью.

НАПИСАТЬ МОДУЛЬ, КОТОРЫЙ ПРОВЕРЯЕТ URI И БЛОКА НЕСАНКЦИОНИРОВАННЫХ ПОЛЬЗОВАТЕЛЕЙ

Вы, конечно, можете это сделать. Основным преимуществом будет то, что это будет очень легкое решение с точки зрения загрузки процессора и памяти, но есть несколько ошибок, на которые вы должны обратить внимание. Например, тот факт, что вы всегда можете получить доступ к своему контенту через URL в формате http://example.com/node/nodenumber),, поэтому вам также необходимо проверить URL для его псевдонимов. Но также тот факт, что пользователь может добавить фиктивный ? Что-то к URL, и вы должны написать регулярное выражение , чтобы учесть такой случай ...

(Также идея модуля правил , предложенная mcrittenden, хороша, но я не упомянул об этом, поскольку думал об этом, только когда прочитал его ответ).

Надеюсь, это поможет!

0 голосов
/ 16 ноября 2009

Вы также можете исследовать Доступ к меню , который позволяет связать доступ между ролью и меню или ролью и деревом меню. (Имейте в виду, что в Drupal таблица «маршрутизатора меню» загадочно представляет собой не только пользовательский интерфейс, но и маршрутизатор трафика, который соединяет каждый фрагмент контента с URL-адресом.)

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

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

...