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

Таблица role

Таблица role является центральной таблицей для системы ролевого управления доступом в Drupal. Она хранит определения всех ролей, доступных на сайте, таких как "Анонимный пользователь", "Аутентифицированный пользователь" и "Администратор". Каждая роль может иметь набор настроенных разрешений, которые определяют, что пользователи с этой ролью могут делать на сайте.

Поля

Поле Тип данных Описание
rid serial Уникальный идентификатор роли (Role ID). Это первичный ключ таблицы, который автоматически увеличивается при добавлении новой записи.
name varchar(64) Машинное имя роли. Должно быть уникальным и содержать только строчные буквы, цифры и подчеркивания. Используется для программной идентификации роли.
weight int Вес роли, который определяет порядок отображения ролей в интерфейсе администратора. Роли с меньшим весом отображаются выше. Также влияет на приоритет при проверке разрешений.

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

Drupal использует систему ролевого управления доступом (RBAC - Role-Based Access Control). Каждому пользователю может быть назначена одна или несколько ролей из таблицы role. Связь между пользователями и ролями устанавливается через таблицу users_roles.

Разрешения для ролей не хранятся непосредственно в этой таблице, а находятся в таблице role_permission. Это позволяет гибко управлять правами доступа без изменения структуры таблицы ролей.

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

Поле weight важно не только для отображения, но и для функциональности модуля. Например, при использовании модуля "Override Node Options" именно вес роли определяет приоритет настроек.

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

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

SELECT rid, name, weight FROM role ORDER BY weight ASC, name ASC;

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

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

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

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