Рассмотрим пример создания навигационной цепочки «хлебные крошки» на Drupal 6 (есть версия и для Drupal 7) с использованием модуля (а точнее набора модулей) Custom Breadcrumbs. Отличие данного расширения от того же Menu Breadcrumb, — более широкие возможности для тонкой настройки, в том числе корректная работа с представлениями (Views), таксономией, страницами панелей. Иными словами это по-настоящему произвольные хлебные крошки без привязки к структуре меню и чему-либо ещё.
Это пример иллюстрирует как ограничивать доступ к нодам на основе некоторых критериев, связанных с пользователем.
В этом примере, модуль будет устанавливать флаг 'private' для ноды. Если флаг установлен, то только пользователи с правом 'view private content' будут видеть содержание ноды, а пользователи с 'edit private content' смогут изменять (но не удалять) ноду.
Кроме того автор ноды всегда сможет просматривать, изменять и удалять её.
Определение базы:
CREATE TABLE node_access_example (
nid int(10) UNSIGNED NOT NULL DEFAULT '0' PRIMARY KEY,
private int,
KEY `node_example_nid` (nid)
)
Система доступа к нодам определяет кто и что может сделать с определёнными нодами.
Для определении прав доступа для ноды используется (). Эта функция сперва проверяет, имеет ли пользователь разрешение 'administer nodes'. Такие пользователи имеют неограниченный доступ ко всем нодам. Затем вызывается хук () в модуле этой ноды (по умолчанию — ()), и возвращаемое значение, TRUE или FALSE, разрешит или запретит доступ. Например, это позволяет модулю blog всегда предоставлять доступ самому автору блога, а модулю book — всегда запрещать редактирование PHP страниц.
Если «нодовый» модуль не вмешивается в процесс ограничения доступа (возвращает NULL в ()), тогда для этого используется таблица 'node_access'. Все такие модули опрашиваются при помощи хука() и в результате собирается список идентификаторов разрешений пользователя (grant IDs). Этот список сравнивается с таблицей по соответствию grant ID. Если в таблице присутствует запись с идентифкатором ноды или идентификатор ноды в таблице равен 0, то доступ к ноде (или нодам) разрешается. Отметьте, что эта таблица, по существу, является списком разрешений; любой совпадающий строки достаточно, чтобы разрешить доступ к ноде. Читать далее »