Comment puis-je vérifier si un utilisateur a un certain rôle?
J'ai trouvé this mais c'est pour Drupal 6.
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
}
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
}
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...
}
}
?>
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.
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
}
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!
}
}
?>
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 )
global $user;
$roleid = 123; //
if(user_has_role($roleid, $user)) {
//yes this user has this role
}
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;
}
}
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. }?> `