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

Таблица user__roles

Таблица user__roles является частью системы полей Drupal и предназначена для хранения связи между пользователями (user) и ролями (user_roles). Каждая запись в этой таблице представляет собой назначение конкретной роли конкретному пользователю.

Поля

Поле Тип данных Описание
bundle varchar(128) Тип сущности, для которой определено поле. Всегда имеет значение user.
deleted tinyint Флаг удаления записи: 0 - запись активна, 1 - запись удалена.
entity_id int Идентификатор пользователя (uid). Внешний ключ к таблице users.
revision_id int Идентификатор ревизии пользователя. Ссылается на users_field_data.vid.
langcode varchar(32) Код языка, для которого предназначены данные.
delta int Порядковый номер значения в списке ролей для данного пользователя.
roles_target_id varchar(255) Идентификатор роли (машинное имя). Внешний ключ к таблице user_roles (поле id).

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

Drupal использует систему ролей и разрешений для управления доступом. Когда пользователю назначается роль (например, "Администратор", "Редактор", "Аутентифицированный пользователь"), в таблицу user__roles добавляется новая запись. Поле entity_id содержит ID пользователя, а поле roles_target_id содержит машинное имя роли.

Один пользователь может иметь несколько ролей, поэтому для одного entity_id может существовать несколько записей с разными значениями roles_target_id и уникальным значением delta для каждого назначения.

При проверке прав доступа система Drupal собирает все роли текущего пользователя, запрашивая их из этой таблицы, а затем объединяет все разрешения, связанные с этими ролями из таблицы user_roles.

Важно отметить, что таблица user__roles не хранит базовые роли, которые есть у каждого пользователя по умолчанию: "Анонимный" (anonymous) и "Аутентифицированный" (authenticated). Эти роли обрабатываются системой на уровне логики и явно не записываются в эту таблицу для каждого пользователя.

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

Получить список всех ролей для конкретного пользователя (например, с uid = 5) можно следующим запросом:

SELECT u.name as username, ur.roles_target_id as role_machine_name FROM user__roles ur INNER JOIN users_field_data u ON ur.entity_id = u.uid WHERE ur.entity_id = 5 AND ur.deleted = 0;

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

  • таблицу users,
    которая хранит основную информацию о пользователях
  • таблицу users_field_data,
    которая содержит данные полей для пользователей
  • таблицу user_roles,
    которая хранит определения ролей и их разрешения
  • таблицу node_access,
    которая управляет доступом к материалам (нодам)
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить