ti-enxame.com

Como destruir uma sessão de usuário específica quando estamos usando o manipulador de sessões php padrão?

Se um usuário A e um usuário B forem superusuários e o usuário A remover a permissão de superusuário do usuário B, e o usuário B estiver conectado, enquanto a sessão do usuário B permanecer ativa, ele poderá fazer qualquer coisa no sistema, incluindo recuperar sua permissão de superusuário.

Atualização

Observando o método JUser::authorise, Podemos ver algo assim:

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

Portanto, se o usuário estiver logado como superusuário, o objeto JUser na sessão terá a propriedade isRoot como true e o método authorise sempre retornará true sem verificação a permissão atual no banco de dados.

OBS : JFactory:getUser() retorna o JUser na sessão

2
csbenjamin

Se a única maneira fosse excluir a sessão no banco de dados (tabela #__session).

Em seguida, o usuário é forçado a efetuar login novamente e as permissões são calculadas novamente.

PDATE: Como o comentário abaixo, não há "maneira joomla" para destruir a sessão se estivermos usando JSessionStorageNone. Tão, you likely have to wait till that users session times out or he logs out himself.

1
Bakual