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