web-dev-qa-db-fra.com

Comment détruire une session utilisateur spécifique lorsque nous utilisons un gestionnaire de session php par défaut?

Si un utilisateur A et un utilisateur B sont tous deux des super-utilisateurs et que l'utilisateur A supprime l'autorisation de superutilisateur de l'utilisateur B, et que l'utilisateur B est connecté, alors que la session de l'utilisateur B reste active, il peut tout faire, y compris récupérer sa permission de super utilisateur.

Mise à jour

En regardant la méthode JUser::authorise, Nous pouvons voir quelque chose comme ceci:

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

Ainsi, si l'utilisateur est connecté en tant que super utilisateur, l'objet JUser de la session aura la propriété isRoot comme true et la méthode authorise retournera toujours true sans vérification. l'autorisation actuelle dans la base de données.

OBS : JFactory:getUser() renvoie le JUser en session

2
csbenjamin

À mon sens, le seul moyen serait de supprimer la session dans la base de données (table #__session).

Ensuite, l'utilisateur est obligé de se connecter à nouveau et les autorisations sont calculées à nouveau.

PDATE: Comme le commentaire ci-dessous, il n'y a pas de "méthode joomla" pour détruire la session si nous utilisons JSessionStorageNone. Alors, you likely have to wait till that users session times out or he logs out himself.

1
Bakual