¿Cómo detectar si el usuario es Super Usuario?

20

Para determinar si el visitante es un invitado , usamos algo como esto:

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

Ahora, si quiero determinar si el visitante es un Superusuario (Administrador) registrado o no, ¿cuál sería el código para eso?

Tengo algunos archivos PHP externos a los que no quiero que nadie pueda acceder, excepto los Superusuarios de mi sitio web de Joomla. Solo trato de asegurar los archivos importando Joomla CMS.

saibbyweb
fuente
1
Es curioso que necesitaba esto anoche y busqué en Google hasta que encontré una solución. En mi caso, estaba anulando la salida de RSFiles, por lo que la barra de herramientas solo se muestra para los administradores.
Brian Peat
1
En realidad, $ user-> get ('isRoot') que está en la respuesta aceptada, no debe usarse. Lo más probable es que en las últimas versiones de Joomla (3.6 y posteriores) no funcione cuando se llama así fuera de JUser :: authorize (). Use $ user-> authorize ('sus parámetros aquí') en su lugar, como la respuesta de dev-m.
FFrewin

Respuestas:

28

estos códigos determinarán si el usuario conectado actualmente es súper usuario o no:

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

ese código verificará lo que está asignado al permiso "Superusuario" en la configuración global y no solo en el nivel de componente. Compruébelo usted mismo en comparación con otras formas.

dev-m
fuente
2
La explicación en esta respuesta es un poco débil, pero creo que core.admines un mejor permiso para verificar que core.edit.
Brilliand
1
Estoy en desacuerdo. core.admin es el permiso que se usa para controlar el acceso a la configuración global, por lo que es la forma adecuada de verificar si un usuario es el super administrador. Si marca el grupo 8 como la respuesta aceptada, si Joomla! alguna vez decide aleatorizarlo por razones de seguridad, su script se romperá. Siempre codifique con el cambio en mente. A menos que nunca tenga la intención de actualizar.
Mathew Lenning
Esta es claramente la mejor combinación para una verificación de Superusuario. Verificará tanto la seguridad como el permiso del Superusuario. github.com/joomla/joomla-cms/blob/staging/libraries/joomla/user/… La otra alternativa es $ user-> get ('isRoot') que supone que la autorización ya se ha utilizado para completar el estado isRoot. El isRoot se puede usar directamente ya que es una propiedad protegida. github.com/joomla/joomla-cms/blob/staging/administrator/…
Peter Wiseman
Solo para aclarar cualquier duda sobre si este código es correcto o no: este código se usa en el núcleo de Joomla (Joomla 3.5.1) para verificar si el usuario es un super administrador o no. Puede encontrarlo en la línea 747 del libraries/joomla/user/user.phparchivo. Es este:$iAmSuperAdmin = $my->authorise('core.admin');
itoctopus
8

Para determinar el estado de "Superusuario" debe verificar $user->isRoot. Esta propiedad se establece después de que se realiza la primera verificación de autorización y se detecta que el usuario es súper administrador.

Sin embargo, por lo general, es mejor que desee verificar si el usuario tiene ciertos permisos, como se describe en las otras respuestas.

Bakual
fuente
3
Esto supone que $ user-> authorize () ya ha sido llamado por otra cosa para llenar la propiedad isRoot. También tenga en cuenta que la propiedad isRoot está protegida, por lo que debe accederse a través de $ user-> get ('isRoot').
Peter Wiseman
6

Prueba esto,

$user  = JFactory::getUser();

$user_groups = $user->groups;

print_r($user_groups);

Esto devolverá una matriz. Por defecto, los usuarios de Joomla Admin Super admin (Grupos 8) y Administrador (Grupo 7).

Puede verificar que la matriz tenga alguno de estos valores, entonces debe ser Usuario administrador. Si ha creado un grupo de Usuarios personalizados, también debe verificarlo #__usergroups parent Id.

Espero eso ayude..

Jobin Jose
fuente
6

Puede usar una condición para rechazar a cualquier persona que no esté en un grupo específico.

$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
fuente
1
El número mágico no es una gran solución. Puede otorgar permisos de Superadministrador a cualquier grupo y / o eliminar el grupo de Superadministrador predeterminado.
David Hayes
Usé algo así if(in_array(8, $user->groups))y funcionó para mí
Linga
4

Pruebe el siguiente código para verificar si el usuario de inicio de sesión es súper administrador u otros usuarios ...

$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
fuente
1
En realidad, $ user-> get ('isRoot') no debe usarse. Lo más probable es que en las últimas versiones de Joomla (3.6 y posteriores) no funcione cuando se llama así fuera de JUser :: authorize (). Use $ user-> authorize ('sus parámetros aquí') en su lugar, como la respuesta de dev-m.
FFrewin
Lo probaré primero, gracias por señalarlo. :)
saibbyweb
1
$user->get('isRoot');no funciona para J3.6.2.
saibbyweb
2

Joomla @since 3.2, campo UserGroupList usa esto para verificar:

$isSuperUser = JFactory::getUser()->authorise('core.admin');
Pedro Bicudo Maschio
fuente
Esta respuesta es muy similar a la respuesta de @ dev-m .
Farahmand
@Farahmand tiene razón, acabo de agregar para confirmar cuál es el método preferido de Joomla y que todavía es válido para Joomla versión 3+
Pedro Bicudo Maschio
Bueno. De todos modos, la pregunta ya ha sido etiquetada con joomla-3.x .
Farahmand