it-swarm-es.tech

¿Cómo destruir una sesión de usuario específica cuando estamos usando el controlador de sesión php predeterminado?

Si un usuario A y un usuario B son superusuarios y el usuario A elimina el permiso de superusuario del usuario B, y el usuario B está conectado, mientras la sesión del usuario B permanece activa, puede hacer cualquier cosa en el sistema, incluyendo recuperar su permiso de superusuario.

Actualización

Mirando el método JUser::authorise, Podemos ver algo como esto:

public function authorise($action, $assetname = null)
{
    // Make sure we only check for core.admin once during the run.
    if ($this->isRoot === null)
    {
        //check if the user is root
    }

    return $this->isRoot ? true : JAccess::check($this->id, $action, $assetname);
}

Entonces, si el usuario inicia sesión como superusuario, el objeto JUser en la sesión tendrá la propiedad isRoot como verdadero y el método authorise siempre devolverá verdadero sin verificación El permiso actual en la base de datos.

OBS : JFactory:getUser() devuelve el JUser en la sesión

2
csbenjamin

En mi opinión, la única forma sería eliminar la sesión en la base de datos (tabla de sesiones #__).

Luego, el usuario se ve obligado a iniciar sesión nuevamente y los permisos se calculan frescos.

ACTUALIZACIÓN: Como el comentario a continuación, no hay una "forma joomla" para destruir la sesión si estamos usando JSessionStorageNone. Asi que, you likely have to wait till that users session times out or he logs out himself.

1
Bakual