¿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.


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.


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.


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..


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;

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';
}

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.