Vérifier si un utilisateur a un rôle

46

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

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

giorgio79
la source

Réponses:

87

Puisque vous avez déjà trouvé ce post , assurez-vous également de lire 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 endommagerait 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
}
Marcvangend
la source
1
Et si je veux vérifier plus d'un rôle. Par exemple, si "éditeur" ou "éditeur", faites des choses fantaisistes. Comment coder Pls conseiller. Je ne peux pas comprendre vraiment.
Adamtan
8
Veuillez lire la réponse: il n'est pas recommandé de rechercher un rôle (ou plus d'un). Vérifiez les autorisations à la place. Le reste de votre question (combinant deux conditions dans une instruction if) concerne PHP de base, rien de lié à Drupal. Lisez la documentation PHP sur les opérateurs logiques .
Marcvangend
11

Pour vérifier si l'utilisateur actuel a un seul ou plusieurs rôles, vous pouvez le faire comme suit:

//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
}
Sadanand Kenganal
la source
9

Mise à jour pour la version Drupal> = 7.36

Vous pouvez utiliser la fonction user_has_role de l'API Drupal à l' adresse 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...
  }
}
?>
Marcin
la source
2

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

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

Subramanian Hariharan
la source
Sous Développement-> Exécuter le code PHP, entrez: global $ user; dpm ($ user);
diamondsea
1

Pour être sûr que le nom du rôle change, il est préférable de rechercher l'ID du rôle (débarrasser) qui peut être trouvé dans la table des rôles de la base de données.

Si vous voulez vérifier un rôle avec débarrasser 16, faites:

// 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
}
Hans Rossel
la source
1
En fait, lorsque vous migrez des éléments tels que les rôles, le nom de l'
ordinateur
Il n'y a pas de nom de machine, mais juste un nom d'utilisateur et un nom d'utilisateur dans la table des rôles. La table users_roles assigne un UID à un débarrasser.
Hans Rossel
1

Voici le code du commentaire mentionné dans la réponse acceptée comme étant la 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!
    }
  }
?>
Eric Johnson
la source
0

Vous pouvez vérifier le rôle d'un utilisateur avec print_r ($ user) et vous obtiendrez quelque chose comme ceci

Objet stdClass
(
    [uid] => 0
    [nom d'hôte] => :: 1
    [rôles] => tableau
        (
            [1] => utilisateur anonyme // le rôle de l'utilisateur actuel mine est anonyme dans votre cas, il peut être différent
        )
Akash Bhawra
la source
0

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;
 }
}
houmem
la source
0
global $user;
$roleid = 123; //
if(user_has_role($roleid, $user)) {
//yes this user has this role
}
adal
la source
0

Les réponses ci-dessus ne fonctionnaient pas, pas sûr, j'ai trouvé ce post et le code devrait être `

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

Pinueve
la source