Як знайти ідентифікатор ролі з назви ролі?


17

Увійшовши, я хочу перевірити джерело даних сторонніх сторін (таблиця в db) для користувача, і якщо він знайдеться, я хочу додати йому роль.

Я не хочу здогадуватися про позбавлення від ролі, я хочу отримати її від імені ролі.

Відповіді:


20

Це досить просто з користувачем_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
Запит, виконаний користувачем_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;

І ви отримаєте список ролей, включаючи ідентифікатор та вагу.


1
Найкращий спосіб - це використання API, який надає Drupal. Доступ безпосередньо до бази даних, коли є API, ніколи не є доброю ідеєю, ані найкращим способом.
kiamlaluno

Це дуже простий спосіб отримати ролі! Я не здивований, що поліція з обміну стеками Drupal проголосувала за таке просте рішення.
BlondeSwan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.