Applications Web: permettant aux super utilisateurs d'identifier d'autres utilisateurs - y a-t-il un modèle de conception pour cela?

StackOverflow https://stackoverflow.com/questions/4901545

Question

  • Dans mon application Web, j'aimerais autoriser les super utilisateurs à usurper les autres utilisateurs.

Ma question:

Y a-t-il un modèle de conception généralement accepté que je pourrais utiliser pour y arriver?

  1. D'une manière générale, je peux imaginer que je devrai garder une trace de l'utilisateur actuel et de l'utilisateur usurpé à l'intérieur de la session.
  2. Mais vous pouvez comprendre que j'aimerais minimiser la complexité attachée à ce changement.

  3. Soit dit en passant, mon application est une application ASP.NET MVC 2, donc si je pouvais profiter d'une infrastructure existante, ce serait formidable.

ÉDITER: J'utilise l'authentification des formulaires.

ÉDITER: Je devrai également suivre le fait qu'un super utilisateur agit au nom d'un autre utilisateur. J'aurai besoin de le faire pour deux raisons:

  1. La journalisation devrait enregistrer le fait qu'un super utilisateur a agi au nom d'un autre utilisateur.
  2. Il est concevable que le super utilisateur veuille revenir à l'écran d'identification pour "changer de contexte" et usurper l'identité d'un autre utilisateur.

ÉDITER: @ Jordão a proposé un Solution principalement réalisable. Ma seule préoccupation est ce qui suit - si le super utilisateur (tout en imitant un autre utilisateur) navigue vers l'écran d'accueil et que le haut de l'écran dit «Bonjour [utilisateur]», je veux qu'il dise «bonjour [utilisateur imitable]» comme opposé à «bonjour [super utilisateur]». Et j'ai peur que la solution de @ jordão rende la mise en œuvre de cet écran et d'autres écrans avec des exigences similaires plus complexes.

Était-ce utile?

La solution

Ne pas faire passer pour les autres utilisateurs, mais donnez aux super utilisateurs suffisamment d'autorisations et d'interfaces exclusives afin qu'ils puissent agir sur les données des autres utilisateurs.

Si vous avez ensuite des données de journalisation ou d'audit, vous savez quel utilisateur (normal ou super) a agi sur les données.

Autres conseils

[Authorize(Roles = "Admin")]
public ActionResult Impersonate(string username)
{
    FormsAuthentication.SignOut();
    var cookie = FormsAuthentication.GetAuthCookie(username, false);
    Response.AppendCookie(cookie);
    return RedirectToAction("index");
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top