Comment trouver l'ID de rôle à partir du nom de rôle?

17

Lors de la connexion, je veux vérifier une source de données tierce (table dans la base de données) pour un utilisateur, et s'il est trouvé, je veux ajouter un rôle à cet utilisateur.

Je ne veux pas deviner le débarrasser du rôle, je veux l'obtenir à partir du nom du rôle.

chim
la source

Réponses:

20

C'est assez simple avec user_roles () et array_search () . Vous trouverez ci-dessous une fonction qui retournera l'ID de rôle s'il existe un rôle correspondant au nom et FALSE sinon.

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

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

Un paquebot serait:

$rid = array_search('administrator', user_roles());
Lauri
la source
1
La requête exécutée par user_roles () est étiquetée traduisible , ce qui signifie qu'un module pourrait traduire les noms de rôle. Drupal ne traduit les noms de rôle que pour les rôles par défaut (c'est-à-dire utilisateur anonyme et utilisateur authentifié).
kiamlaluno
32

Connaître le nom de machine du rôle, il suffit de l'utiliser user_role_load_by_name().

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

Si le rôle n'existe peut-être pas ...

$role = user_role_load_by_name('Role Name');

$role_id = $role ? $role->rid : NULL;
chim
la source
3
Je préfère de beaucoup cette approche, car avec l'autre approche, les noms de rôle pourraient être traduits. En fait, la requête exécutée par user_roles () est étiquetée traduisible . Drupal ne traduit que les noms des rôles par défaut, mais un module pourrait également traduire les autres noms de rôle.
kiamlaluno
4
$ rid = ($ role = user_role_load_by_name ())? $ role-> rid: NULL;
Pierre Buyle
-2

Le meilleur moyen d'identifier le rôle et son ID est à partir de SQL. Exécutez cette requête dans votre éditeur SQL.

select * from roles;

Et vous obtiendrez la liste des rôles, y compris l'identifiant et le poids.

Bets Way
la source
1
La meilleure façon est d'utiliser l'API fournie par Drupal. Accéder directement à la base de données, lorsqu'il existe une API, n'est jamais une bonne idée, ni la meilleure façon.
kiamlaluno
C'est un moyen très simple d'obtenir les rôles! Je ne suis pas surpris que la police Drupal Stack Exchange ait voté contre une solution aussi simple.
BlondeSwan