Рассмотрим пример создания навигационной цепочки «хлебные крошки» на 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)
)
Система доступа к нодам определяет кто и что может сделать с определёнными нодами.
Для определении прав доступа для ноды используется node_access(). Эта функция сперва проверяет, имеет ли пользователь разрешение 'administer nodes'. Такие пользователи имеют неограниченный доступ ко всем нодам. Затем вызывается хук hook_access() в модуле этой ноды (по умолчанию — node_content_access()), и возвращаемое значение, TRUE или FALSE, разрешит или запретит доступ. Например, это позволяет модулю blog всегда предоставлять доступ самому автору блога, а модулю book — всегда запрещать редактирование PHP страниц.
Если «нодовый» модуль не вмешивается в процесс ограничения доступа (возвращает NULL в hook_access()), тогда для этого используется таблица 'node_access'. Все такие модули опрашиваются при помощи хукаhook_node_grants() и в результате собирается список идентификаторов разрешений пользователя (grant IDs). Этот список сравнивается с таблицей по соответствию grant ID. Если в таблице присутствует запись с идентифкатором ноды или идентификатор ноды в таблице равен 0, то доступ к ноде (или нодам) разрешается. Отметьте, что эта таблица, по существу, является списком разрешений; любой совпадающий строки достаточно, чтобы разрешить доступ к ноде. Читать далее »