Risposte:
Dato che hai già trovato quel post , assicurati di leggere anche i commenti. Spiega chiaramente perché si consiglia di verificare un'autorizzazione rispetto alla verifica di un ruolo. Quando si utilizzano le autorizzazioni, è possibile assegnare tale autorizzazione a più ruoli, il che rende il sistema più flessibile. Inoltre, ricorda che i ruoli possono essere rinominati, il che spezzerebbe il tuo codice.
Detto questo, se vuoi controllare un ruolo, puoi farlo:
// 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
}
Per verificare se l'utente corrente ha un singolo ruolo o uno qualsiasi di più ruoli, un ottimo modo è fare:
//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
}
Aggiornamento per la versione di Drupal> = 7.36
Puoi utilizzare la funzione user_has_role dall'API Drupal https://api.drupal.org/api/drupal/modules%21user%21user.module/function/user_has_role/7 .
Prova questo esempio:
<?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...
}
}
?>
È possibile installare il modulo di sviluppo ed eseguire dpm ($ utente). Questo stamperà un array con tutte le informazioni dell'utente incluso il ruolo utente.
Da questo array è possibile trovare la posizione dell'array di "ruoli" e utilizzarlo nel modulo per trovare il ruolo utente.
Per essere a prova di futuro nel caso in cui il nome del ruolo cambi, è meglio verificare l'id del ruolo (rid) che si trova nella tabella dei ruoli nel database.
Se vuoi controllare un ruolo con rid 16, fai:
// 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
}
Ecco il codice effettivo del commento a cui si fa riferimento nella risposta accettata come best practice
<?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!
}
}
?>
Puoi controllare il ruolo di un utente tramite print_r ($ user) e nell'output otterrai qualcosa del genere
Oggetto stdClass ( [uid] => 0 [hostname] => :: 1 [ruoli] => Matrice ( [1] => utente anonimo // Il ruolo utente corrente mio è anonimo nel tuo caso potrebbe essere diverso )