¿Cómo encuentro la identificación del rol del nombre del rol?

17

Al iniciar sesión, quiero verificar un origen de datos de terceros (tabla en la base de datos) para un usuario, y si se encuentra, quiero agregar un rol a ese usuario.

No quiero adivinar la eliminación del rol, quiero obtenerlo del nombre del rol.

chim
fuente

Respuestas:

20

Esto es bastante sencillo con user_roles () y array_search () . A continuación se muestra una función que devolverá la ID de rol si hay un rol que coincida con el nombre y FALSO de lo contrario.

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

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

Un revestimiento sería:

$rid = array_search('administrator', user_roles());
Lauri
fuente
1
La consulta ejecutada por user_roles () está etiquetada como traducible , lo que significa que un módulo podría traducir los nombres de los roles. Drupal traduce los nombres de los roles solo para los roles predeterminados (es decir, usuario anónimo y usuario autenticado).
kiamlaluno
32

Conociendo el nombre de la máquina del rol, es suficiente para usar user_role_load_by_name().

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

Si el rol podría no existir ...

$role = user_role_load_by_name('Role Name');

$role_id = $role ? $role->rid : NULL;
chim
fuente
3
Prefiero este enfoque, ya que con el otro enfoque los nombres de los roles podrían traducirse. De hecho, la consulta ejecutada por user_roles () está etiquetada como traducible . Drupal traduce solo los nombres de los roles predeterminados, pero un módulo también podría traducir los otros nombres de roles.
kiamlaluno
44
$ rid = ($ role = user_role_load_by_name ())? $ role-> rid: NULL;
Pierre Buyle
-2

La mejor manera de identificar el rol y su id es desde SQL. Ejecute esta consulta en su editor de SQL.

select * from roles;

Y obtendrá la lista de Roles, incluida la identificación y el peso.

Modo de apuestas
fuente
1
La mejor manera es usar la API proporcionada por Drupal. Acceder directamente a la base de datos, cuando hay una API, nunca es una buena idea, ni la mejor manera.
kiamlaluno
¡Esta es una manera muy fácil de obtener los roles! No me sorprende que la policía de Drupal Stack Exchange rechazara una solución tan simple.
BlondeSwan