2011-03-08 14 views

risposta

23

È possibile accedere ai ruoli utente da solo utilizzando questo PHP frammento:

<?php $GLOBALS['user']->roles; ?> 
9

ho trovato una soluzione interessante per verificare la presenza di molteplici ruoli di un utente:

global $user; 
$check = array_intersect(array('moderator', 'administrator'), array_values($user->roles)); 
if (empty($check) ? FALSE : TRUE) { 
    // is admin 
} else { 
    // is not admin 
} 
24

$ user- > ruoli è un array di ruoli che appartengono all'utente codificato dall'ID ruolo, valore è la stringa ruolo. Quindi, se si voleva verificare se l'utente ha avuto ruolo 'utente autenticato' snippet di codice sarebbe simile a questa (non necessariamente l'approccio più ottimizzato, in_array è una funzione piuttosto prestazioni-costoso):

global $user; 

if (in_array('authenticated user', $user->roles)) { 
    //do stuff here 
} 

noti che in_array può anche accettare un array come "ago" (argomento n. 1) in modo da poter controllare varie opzioni di ruolo:

in_array(array('authenticated user', 'anonymous user'), $user->roles); 
+0

grazie tua risposta è stata utile per me. grazie. – zhilevan

+4

Sul secondo snippit 'arrayed' needle, [per i documenti] (http://php.net/manual/en/function.in-array.php) e un rapido bit di codice di test, stai chiedendo 'in_array' per verificare se '$ user-> roles' contiene o meno un array di' array ('utente autenticato', 'utente anonimo') ', non i singoli elementi' 'utente autenticato'' o '' utente anonimo'' . [array_intersect()] (http://php.net/manual/en/function.array-intersect.php) farebbe comunque il trucco. –

1

// Carica l'utente attualmente connesso.

global $user; 
print_r($user->roles);//this gives you current user roles 

// per verificare se egli è amministratore, è possibile farlo

if (in_array('administrator', $user->roles)) { 
      // do some stuff 
      $form['field_end_date']['#disabled'] = FALSE; 
    } 
Problemi correlati