Come rilevare se l'utente è Super User?


20

Per determinare se il visitatore è un ospite , utilizziamo qualcosa del genere:

if ($user->guest) {
echo 'Hello, guest!';
}

Ora, se voglio determinare se il visitatore è un SuperUser (amministratore) registrato o meno, quale sarebbe il codice per quello?

Ho alcuni file PHP esterni che non voglio essere accessibili a nessuno tranne che ai SuperUser del mio sito Web Joomla. Sto solo cercando di proteggere i file importando Joomla CMS.


1
Divertente, avevo bisogno di quest'ultima notte e ho cercato su Google finché non ho trovato una soluzione. Nel mio caso stavo sovrascrivendo l'output di RSFiles in modo che la barra degli strumenti venisse visualizzata solo per gli amministratori.
Brian Peat,

1
In realtà $ user-> get ('isRoot') che si trova nella risposta accettata, non dovrebbe essere usato. Molto probabilmente nelle ultime versioni di Joomla (3.6 e successive) non funzionerà se chiamato in questo modo al di fuori di JUser :: authorize (). Usa invece $ user-> autorize ('qui i tuoi parametri'), come la risposta di dev-m.
FFrewin

Risposte:


28

questi codici determineranno se l'utente attualmente connesso è super user o meno -

$user = JFactory::getUser();
$isroot = $user->authorise('core.admin');

quel codice controllerà ciò che è mappato all'autorizzazione "Super utente" nella configurazione globale e non solo a livello di componente. Controllalo tu stesso confrontandolo con altri modi.


2
La spiegazione in questa risposta è un po 'debole, ma penso che core.adminsia un permesso migliore per verificare che core.edit.
Brilliand,

1
Non sono d'accordo. core.admin è l'autorizzazione utilizzata per controllare l'accesso alla configurazione globale, quindi è il modo appropriato per verificare se un utente è il super amministratore. Se controlli per il gruppo 8 come la risposta accettata, se Joomla! decide mai di randomizzarlo per motivi di sicurezza, il tuo script si romperà. Codifica sempre pensando al cambiamento. A meno che tu non abbia mai intenzione di aggiornare.
Mathew Lenning,

Questa è chiaramente la migliore corrispondenza per un controllo SuperUser. Controllerà sia per la sicurezza, sia per l'autorizzazione del SuperUser. github.com/joomla/joomla-cms/blob/staging/libraries/joomla/user/… L'altra alternativa è $ user-> get ('isRoot') che presuppone che l'autorizzazione sia già stata utilizzata per popolare lo stato isRoot. IsRoot può essere utilizzato direttamente in quanto proprietà protetta. github.com/joomla/joomla-cms/blob/staging/administrator/…
Peter Wiseman,

Giusto per chiarire ogni dubbio sulla correttezza o meno di questo codice: questo codice viene utilizzato nel core di Joomla (Joomla 3.5.1) per verificare se l'utente è un super amministratore o meno. Puoi trovarlo nella riga 747 del libraries/joomla/user/user.phpfile. È questo:$iAmSuperAdmin = $my->authorise('core.admin');
itoctopus,

8

Per determinare lo stato di "Super utente" devi controllare $user->isRoot. Questa proprietà viene impostata dopo il primo controllo di autorizzazione e l'utente viene rilevato come super amministratore.

Tuttavia di solito è meglio verificare se l'utente dispone di determinate autorizzazioni come descritto nelle altre risposte.


3
Ciò presuppone che $ user-> authorize () sia già stato chiamato da qualcos'altro per popolare la proprietà isRoot. Si noti inoltre che la proprietà isRoot è protetta, quindi deve essere accessibile tramite $ user-> get ('isRoot').
Peter Wiseman,

6

Prova questo,

$user  = JFactory::getUser();

$user_groups = $user->groups;

print_r($user_groups);

Questo restituirà un array, per impostazione predefinita Utenti Admin di Joomla Super admin (Gruppi 8) e Administrator (Gruppo 7).

È possibile verificare che l'array abbia uno di questi valori, quindi dovrebbe essere un utente amministratore. Se si crea un gruppo di utenti personalizzati, è necessario controllare #__usergroups parent Idanche.

Spero che sia d'aiuto..


6

È possibile utilizzare una condizione per rifiutare chi non appartiene a un gruppo specifico.

$user = JFactory::getUser();
$groups = $user->groups;

if (in_array(8, $groups)):

 //only enter if the user is in the group 8 (group 8 = Super-Administrator)

endif;

1
Il numero magico non è un'ottima soluzione. È possibile concedere autorizzazioni Super Admin a qualsiasi gruppo e / o eliminare il gruppo Super Admin predefinito.
David Hayes,

Ho usato qualcosa del genere if(in_array(8, $user->groups))e ha funzionato per me
Linga,

4

Prova sotto il codice per verificare se l'utente di accesso è super amministratore o altri utenti ...

$user = JFactory::getUser();
$isAdmin = $user->get('isRoot');
if ($isAdmin) {
echo 'You are an Administrator';
}
else  {
echo 'You are not Administrator';
}

OR

function isSuperAdmin()
{
  $user = JFactory::getUser();
  return $user->get('isRoot');
}    

if (isSuperAdmin()) 
{
  echo 'You are an Administrator';
}
else  {
  echo 'You are not Administrator';
}

1
In realtà $ user-> get ('isRoot') non dovrebbe essere usato. Molto probabilmente nelle ultime versioni di Joomla (3.6 e successive) non funzionerà quando viene chiamato in questo modo al di fuori di JUser :: authorize (). Usa invece $ user-> autorize ('qui i tuoi parametri'), come la risposta di dev-m.
FFrewin

Lo proverò per primo, grazie per averlo sottolineato. :)
saibbyweb,

1
$user->get('isRoot');non funziona per J3.6.2.
saibbyweb,

2

Joomla @since 3.2, campo UserGroupList utilizza questo per verificare:

$isSuperUser = JFactory::getUser()->authorise('core.admin');

Questa risposta è molto simile alla risposta di @ dev-m .
Farahmand,

@Farahmand hai ragione, ho appena aggiunto per confermare qual è il metodo preferito da Joomla e che è ancora valido per Joomla versione 3+
Pedro Bicudo Maschio,

Va bene. Ad ogni modo, la domanda è già stata taggata con joomla-3.x .
Farahmand,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.