Таблица 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,
которая хранит внешние аутентификационные данные