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

Таблица users_roles

Таблица users_roles является технической связующей таблицей в Drupal, которая реализует отношение многие-ко-многим между таблицами users и role. Каждая запись в этой таблице означает, что пользователю с определённым uid назначена роль с определённым rid.

Поля

Поле Тип данных Описание
uid int Идентификатор пользователя. Внешний ключ, ссылающийся на поле uid в таблице users. Вместе с rid образует первичный ключ таблицы.
rid int Идентификатор роли. Внешний ключ, ссылающийся на поле rid в таблице role. Вместе с uid образует первичный ключ таблицы.

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

Drupal использует ролевую модель управления доступом (RBAC). Каждому пользователю может быть назначено несколько ролей, и каждой роли могут быть назначены определённые разрешения (permissions). Таблица users_roles хранит связи между этими двумя сущностями.

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

Важно отметить, что таблица users_roles не содержит информации о самих ролях или пользователях - только связи между их идентификаторами. Данные о пользователях хранятся в users, а о ролях - в role.

Для оптимизации производительности Drupal кэширует разрешения пользователей, поэтому изменения в назначении ролей могут потребовать сброса кэша.

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

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

SELECT u.name as username, r.name as role_name FROM users_roles ur INNER JOIN users u ON ur.uid = u.uid INNER JOIN role r ON ur.rid = r.rid WHERE ur.uid = 5;

Найти всех пользователей, имеющих определённую роль (например, роль 'administrator'):

SELECT u.uid, u.name FROM users_roles ur INNER JOIN users u ON ur.uid = u.uid INNER JOIN role r ON ur.rid = r.rid WHERE r.name = 'administrator';

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

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