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.