Comment détecter si l'utilisateur est super utilisateur?

20

Pour déterminer si le visiteur est un invité , nous utilisons quelque chose comme ceci:

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

Maintenant, si je veux déterminer si le visiteur est un super-utilisateur enregistré (administrateur) ou non, quel serait le code pour cela?

J'ai des fichiers PHP externes auxquels je ne veux être accessible par personne, à l'exception des superutilisateurs de mon site Web Joomla. J'essaie simplement de sécuriser les fichiers en important Joomla CMS.

saibbyweb
la source
1
Drôle, j'avais besoin de ça hier soir et je suis allé sur Google jusqu'à ce que je trouve une solution. Dans mon cas, je remplaçais la sortie de RSFiles donc la barre d'outils n'apparaît que pour les administrateurs.
Brian Peat
1
En fait, $ user-> get ('isRoot') qui est dans la réponse acceptée, ne doit pas être utilisé. Très probablement dans les dernières versions de Joomla (3.6 et ultérieures), cela ne fonctionnera pas lorsqu'il est appelé comme ceci en dehors de JUser :: authorize (). Utilisez plutôt $ user-> authorize ('vos paramètres ici'), comme la réponse de dev-m.
FFrewin

Réponses:

28

ces codes détermineront si l'utilisateur actuellement connecté est super utilisateur ou non -

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

ce code vérifiera ce qui est mappé à l'autorisation "Super utilisateur" dans la configuration globale et pas seulement au niveau du composant. Vérifiez-le vous-même en comparant avec d'autres façons.

dev-m
la source
2
L'explication dans cette réponse est un peu faible, mais je pense que core.adminc'est une meilleure autorisation de vérifier que core.edit.
Brilliand
1
Je ne suis pas d'accord. core.admin est l'autorisation utilisée pour contrôler l'accès à la configuration globale, c'est donc le moyen approprié de vérifier si un utilisateur est le super administrateur. Si vous recherchez le groupe 8 comme la réponse acceptée, si Joomla! décide de le randomiser pour des raisons de sécurité, votre script se cassera. Codez toujours en pensant au changement. À moins que vous n'ayez jamais l'intention de mettre à niveau.
Mathew Lenning
C'est clairement la meilleure correspondance pour une vérification SuperUser. Il vérifiera à la fois la sécurité intégrée et l'autorisation SuperUser. github.com/joomla/joomla-cms/blob/staging/libraries/joomla/user/… L'autre alternative est $ user-> get ('isRoot') qui suppose que l'autorisation a déjà été utilisée pour remplir l'état isRoot. L'isRoot peut être utilisé directement car c'est une propriété protégée. github.com/joomla/joomla-cms/blob/staging/administrator/…
Peter Wiseman
Juste pour dissiper tout doute quant à savoir si ce code est correct ou non: ce code est utilisé dans le noyau de Joomla (Joomla 3.5.1) pour vérifier si l'utilisateur est un super administrateur ou non. Vous pouvez le trouver à la ligne 747 du libraries/joomla/user/user.phpfichier. C'est celui-ci:$iAmSuperAdmin = $my->authorise('core.admin');
itoctopus
8

Pour déterminer le statut de "super utilisateur", vous devez vérifier $user->isRoot. Cette propriété est définie après la première vérification d'autorisation et lorsque l'utilisateur est détecté comme super administrateur.

Cependant, il est généralement préférable de vérifier si l'utilisateur dispose de certaines autorisations, comme décrit dans les autres réponses.

Bakual
la source
3
Cela suppose que $ user-> authorize () a déjà été appelé par quelque chose d'autre pour remplir la propriété isRoot. Notez également que la propriété isRoot est protégée et doit donc être accessible via $ user-> get ('isRoot').
Peter Wiseman
6

Essaye ça,

$user  = JFactory::getUser();

$user_groups = $user->groups;

print_r($user_groups);

Cela renverra un tableau, Par défaut, les utilisateurs Joomla Admin Super admin (Groupes 8) et Administrateur (Groupe 7).

Vous pouvez vérifier que le tableau possède l'une de ces valeurs, il doit s'agir d'un utilisateur administrateur.Si vous êtes créé un groupe d'utilisateurs personnalisés, vous devez #__usergroups parent Idégalement vérifier .

J'espère que cela aide..

Jobin Jose
la source
6

Vous pouvez utiliser une condition pour refuser toute personne qui ne fait pas partie d'un groupe spécifique.

$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;
Adam Tremblay Lavoie
la source
1
Le nombre magique n'est pas une excellente solution. Vous pouvez accorder des autorisations de super administrateur à n'importe quel groupe et / ou supprimer le groupe de super administrateur par défaut.
David Hayes
J'ai utilisé quelque chose comme if(in_array(8, $user->groups))ça et ça a fonctionné pour moi
Linga
4

Essayez le code ci-dessous pour vérifier si l'utilisateur connecté est super administrateur ou d'autres utilisateurs ...

$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';
}
PCMShaper
la source
1
En fait, $ user-> get ('isRoot') ne doit pas être utilisé. Très probablement dans les dernières versions de Joomla (3.6 et ultérieures), cela ne fonctionnera pas quand il sera appelé comme ceci en dehors de JUser :: authorize (). Utilisez plutôt $ user-> authorize ('vos paramètres ici'), comme la réponse de dev-m.
FFrewin
Je vais le tester d'abord, merci de l'avoir signalé. :)
saibbyweb
1
$user->get('isRoot');ne fonctionne pas pour J3.6.2.
saibbyweb
2

Joomla @since 3.2, le champ UserGroupList utilise ceci pour vérifier:

$isSuperUser = JFactory::getUser()->authorise('core.admin');
Pedro Bicudo Maschio
la source
Cette réponse est très similaire à la réponse de @ dev-m .
Farahmand
@ Farahmand vous avez raison, je viens d'ajouter pour confirmer quelle est la méthode préférée de Joomla et qu'elle est toujours valable pour Joomla version 3+
Pedro Bicudo Maschio
D'accord. Quoi qu'il en soit, la question a déjà été taguée avec joomla-3.x .
Farahmand