web-dev-qa-db-fra.com

Vérifier si un utilisateur a un rôle

Comment puis-je vérifier si un utilisateur a un certain rôle?

J'ai trouvé this mais c'est pour Drupal 6.

45
giorgio79

Puisque vous avez déjà trouvé ce message , assurez-vous de lire également les commentaires. Cela explique clairement pourquoi il est recommandé de rechercher une autorisation plutôt que de rechercher un rôle. Lorsque vous utilisez des autorisations, vous pouvez attribuer cette autorisation à plusieurs rôles, ce qui rend votre système plus flexible. N'oubliez pas non plus que les rôles peuvent être renommés, ce qui casserait votre code.

Cela dit, si vous voulez vérifier un rôle, vous pouvez le faire:

// Load the currently logged in user.
global $user;

// Check if the user has the 'editor' role.
if (in_array('editor', $user->roles)) {
  // do fancy stuff
}
88
marcvangend

Pour vérifier si l'utilisateur actuel a un seul rôle ou plusieurs rôles, un excellent moyen est de procéder:

//can be used in access callback too
function user_has_role($roles) {
    //checks if user has role/roles
    return !!count(array_intersect(is_array($roles)? $roles : array($roles), array_values($GLOBALS['user']->roles)));
};

if (user_has_role(array('moderator', 'administrator'))) {
  // $user is admin or moderator
} else if(user_has_role('tester')){
  // $user is tester
} else{
  // $user is not admin and not moderator
}
11
Sadanand Kenganal

Mise à jour pour Drupal version> = 7.36

Vous pouvez utiliser la fonction user_has_role de Drupal https://api.drupal.org/api/drupal/modules%21user%21user.module/function/user_has_role/7 =.

Essayez cet exemple:

<?php
function MYMODULE_foo() {
  $role = user_role_load_by_name('Author');
  if (user_has_role($role->rid)) {
    // Code if user has 'Author' role...
  }
  else {
    // Code if user doesn't have 'Author' role...
  }

  $user = user_load(123);

  if(user_has_role($role->rid, $user)) {
    // Code if user has 'Author' role...
  }
  else {
    // Code if user doesn't have 'Author' role...
  }
}
?>
9
Marcin

Vous pouvez installer le module devel et faire dpm ($ user). Cela imprimera un tableau avec toutes les informations utilisateur, y compris le rôle utilisateur.

À partir de ce tableau, vous pouvez trouver la position du tableau des "rôles" et l'utiliser dans votre module pour trouver le rôle d'utilisateur.

2

Pour être à l'épreuve du temps dans le cas où le nom de rôle change, il est préférable de vérifier l'ID de rôle (rid) qui peut être trouvé dans la table des rôles dans la base de données.

Si vous souhaitez rechercher un rôle avec rid 16, procédez comme suit:

// Load the currently logged in user.
global $user;

// Check if the user has the 'editor' role, when 'editor' has role id 16
if (array_key_exists(16, $user->roles)) {
  // do fancy stuff
}
1
Hans Rossel

Voici le code réel de comment auquel la réponse acceptée fait référence en tant que meilleure pratique

<?php
  function mymodule_perm() {
    return array('access something special');
  }

  function dosomethingspecial() {
    // For current user
    if (user_access('access something special')) {
      // Doing something special!
    }

    // For a specific user
    if (user_access('access something special', $theuser)) {
      // Doing something special!
    }
  }
?>
1
Eric Johnson

Vous pouvez vérifier le rôle d'un utilisateur par print_r ($ user) et en sortie, vous obtiendrez quelque chose comme ça

 Objet stdClass 
 (
 [uid] => 0 
 [nom d'hôte] => :: 1 
 [rôles] => Tableau 
 (
 [1] => utilisateur anonyme // Le rôle d'utilisateur actuel est anonyme dans votre cas, il peut être différent 
) 
0
akash bhawra
global $user;
$roleid = 123; //
if(user_has_role($roleid, $user)) {
//yes this user has this role
}
0
adal

pour vérifier si un utilisateur a un certain rôle:

function test_role(){
   global $user;
   if(isset($user->roles['my_role'])){
     return true;
   }
   else {
    return false;
 }
}
0
houmem

Les réponses ci-dessus n'ont pas fonctionné, pas sûr, j'ai trouvé cela post et le code devrait être `

// Vérifiez si $ user a le rôle d'administrateur. if (in_array ('administrator', array_values ​​($ user-> roles))) {// Faites quelque chose. }?> `

0
pinueve