Как найти идентификатор роли из имени роли?

17

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

Я не хочу угадывать избавление от роли, я хочу получить его из названия роли.

Хим
источник

Ответы:

20

Это довольно просто с user_roles () и array_search () . Ниже приведена функция, которая возвращает идентификатор роли, если существует роль, соответствующая имени, и FALSE в противном случае.

function get_role_by_name($name) {
  $roles = user_roles();
  return array_search($name, $roles);
}

// Sample usage
$rid = get_role_by_name('administrator');

Один лайнер будет:

$rid = array_search('administrator', user_roles());
Лаури
источник
1
Запрос, выполняемый user_roles () , помечается как переводимый , что означает, что модуль может переводить имена ролей. Drupal переводит имена ролей только для ролей по умолчанию (т. Е. Анонимный пользователь и аутентифицированный пользователь).
kiamlaluno
32

Зная имя машины на роль, ее достаточно использовать user_role_load_by_name().

if ($role = user_role_load_by_name('Role Name')) {
  // The role ID is in $role->rid.
}

Если Роль может не существовать ...

$role = user_role_load_by_name('Role Name');

$role_id = $role ? $role->rid : NULL;
Хим
источник
3
Я предпочитаю этот подход, так как с другим подходом имена ролей могут быть переведены. Фактически, запрос, выполняемый user_roles () , помечен как переводимый . Drupal переводит только имена для ролей по умолчанию, но модуль может также переводить имена других ролей.
kiamlaluno
4
$ rid = ($ role = user_role_load_by_name ())? $ role-> rid: NULL;
Пьер Байль
-2

Лучший способ определить роль и ее идентификатор из SQL. Запустите этот запрос в вашем редакторе SQL.

select * from roles;

И вы получите список ролей, включая идентификатор и вес.

Bets Way
источник
1
Лучший способ - использовать API, предоставляемый Drupal. Прямой доступ к базе данных, когда есть API, никогда не является ни хорошей идеей, ни лучшим способом.
kiamlaluno
Это очень простой способ получить роли! Я не удивлен, что полиция обмена стека Drupal отказалась от такого простого решения.
BlondeSwan