НОВИНКА!
Занимательная математика от Трепачёва. Присоединяйтесь к нам!
5 of 182 menu

Таблица node_access

Таблица node_access является ключевым компонентом системы управления доступом Drupal. Она хранит записи, которые определяют, какая роль пользователя имеет какие права (view, update, delete) к каким материалам (нодам) при определенных условиях. Модули (такие как node, content_moderation, organic_groups) могут создавать свои записи в этой таблице для реализации сложных моделей прав доступа.

Поля

Поле Тип данных Описание
nid int Идентификатор ноды (материала), к которой применяется правило доступа. Внешний ключ для таблицы node. Может быть 0, что означает "все ноды".
langcode varchar(12) Код языка, для которого применяется правило. Пустая строка означает, что правило применяется ко всем языкам.
fallback int Флаг резервного правила. Если установлен в 1, это правило будет использоваться, если для данного языка (langcode) не найдено более конкретного правила. Обычно для каждого модуля, добавляющего права, создается одно резервное правило с nid = 0.
gid int Идентификатор группы доступа (Grant ID). Определяет, к какой группе (роли, аудитории, команде) применяется это правило. Например, ID роли пользователя или ID группы в модуле Organic Groups.
realm varchar(255) "Сфера" или пространство, в котором действует правило. Обычно это имя модуля, который создал запись (например, all, content_moderation, og). Помогает различным модулям не конфликтовать друг с другом.
grant_view int Право на просмотр ноды. 1 - разрешено, 0 - запрещено.
grant_update int Право на обновление (редактирование) ноды. 1 - разрешено, 0 - запрещено.
grant_delete int Право на удаление ноды. 1 - разрешено, 0 - запрещено.

Как это работает

Когда пользователь пытается получить доступ к ноде (просмотреть, отредактировать, удалить), Drupal запрашивает таблицу node_access, чтобы определить, разрешено ли данное действие. Запрос учитывает nid материала, язык, роли пользователя (которые сопоставляются с gid) и сферу (realm).

Правила доступа могут быть как разрешающими, так и запрещающими. Drupal использует логику "разрешить, если хотя бы одно правило разрешает". Если для действия (например, grant_view) найдена хотя бы одна запись со значением 1, и пользователь соответствует условиям этой записи, доступ будет предоставлен.

Модули могут реализовывать хук hook_node_access_records для добавления своих записей в таблицу при сохранении ноды и хук hook_node_grants для сообщения ядру Drupal, к каким группам доступа (gid) принадлежит текущий пользователь в определенной сфере (realm).

При изменении прав доступа к ноде или при установке новых модулей, влияющих на доступ, может потребоваться перестроение прав доступа через административный интерфейс (Администрирование > Конфигурация > Разработка > Производительность) или с помощью Drush-команды drush cr или drush node-access-rebuild.

Пример SQL-запроса

Посмотреть все правила доступа для конкретной ноды можно следующим запросом:

SELECT na.*, n.title as node_title FROM node_access na LEFT JOIN node n ON (na.nid = n.nid) WHERE na.nid = 42 ORDER BY na.realm, na.gid;

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

  • таблицу node,
    которая хранит основные данные материалов (нод)
  • таблицу users,
    которая содержит данные пользователей системы
  • таблицу node_field_data,
    которая хранит данные полей нод на разных языках
  • таблицу url_alias,
    которая управляет ЧПУ для материалов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить