Réponses:
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
}
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
}
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...
}
}
?>
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.
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
}
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!
}
}
?>
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 )