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.

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
}

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
}

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...
  }
}
?>

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.


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
}

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!
    }
  }
?>

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
        )

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;
 }
}

0
global $user;
$roleid = 123; //
if(user_has_role($roleid, $user)) {
//yes this user has this role
}

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. }?> `

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.