Таблица block_role
Таблица block_role является связующей таблицей в Drupal, которая реализует отношение многие-ко-многим между конфигурациями блоков (block) и пользовательскими ролями (role). Она определяет видимость блоков для различных ролей пользователей.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
id |
int |
Первичный ключ записи. Уникальный идентификатор связи. |
block_id |
int |
Внешний ключ, ссылающийся на поле id таблицы block. Идентификатор блока, для которого настраивается видимость.
|
role_id |
varchar(255) |
Внешний ключ, ссылающийся на поле id таблицы role. Идентификатор роли, которой разрешено видеть данный блок.
|
Как это работает
Когда администратор настраивает видимость блока через пользовательский интерфейс (на странице /admin/structure/block, в настройках конкретного блока, в разделе "Видимость"), он может выбрать роли пользователей, которым этот блок должен отображаться.
При сохранении конфигурации блока система создает записи в таблице block_role. Каждая запись связывает block_id (идентификатор блока) с role_id (идентификатором роли). Если для блока выбрано несколько ролей, создается несколько соответствующих записей в этой таблице.
В момент отображения страницы система Drupal, определяя роли текущего пользователя, проверяет эту таблицу, чтобы решить, показывать ли ему тот или иной блок. Если связь между блоком и ролью пользователя существует в block_role, блок отображается.
Важно отметить, что данная таблица используется для хранения разрешений на показ блока. Если для блока не настроено ограничение по ролям (например, выбрана опция "Показывать всем ролям, кроме перечисленных" или не выбрано ни одной роли), записи в эту таблицу не добавляются.
Пример SQL-запроса
Получить список всех ролей, которым доступен блок с определённым ID, можно следующим запросом:
SELECT r.id as role_id, r.label as role_name
FROM block_role br
INNER JOIN role r ON br.role_id = r.id
WHERE br.block_id = 10;
Найти все блоки, доступные роли "authenticated":
SELECT b.id, b.plugin, b.theme, b.region
FROM block_role br
INNER JOIN block b ON br.block_id = b.id
WHERE br.role_id = 'authenticated';
Смотрите также
-
таблицу
block,
которая хранит конфигурации блоков -
таблицу
role,
которая хранит пользовательские роли -
таблицу
users,
которая хранит данные пользователей -
таблицу
users_data,
которая хранит дополнительные данные пользователей