Domanda

  • Nella mia applicazione web, vorrei consentire ai super utenti di impersonare altri utenti.

La mia domanda:

Esiste un modello di progettazione generalmente accettato che potrei utilizzare per realizzare questo obiettivo?

  1. In generale, posso immaginare che dovrò tenere traccia dell'utente corrente e dell'utente impersonato all'interno della sessione.
  2. Ma puoi capire che vorrei ridurre al minimo la complessità associata a questa modifica.

  3. Per inciso, la mia applicazione è un'applicazione ASP.NET MVC 2, quindi se potessi sfruttare qualsiasi infrastruttura esistente, sarebbe fantastico.

MODIFICA: sto utilizzando l'autenticazione basata su moduli.

MODIFICA: dovrò anche monitorare il fatto che un super utente agisce per conto di un altro utente. Avrò bisogno di farlo per due motivi:

  1. La registrazione dovrebbe registrare il fatto che un super utente ha agito per conto di un altro utente.
  2. È concepibile che il superutente desideri tornare alla schermata di rappresentazione per "cambiare contesto" e impersonare un altro utente.

EDIT: @ Jordão ha proposto un soluzione per lo più praticabile . La mia unica preoccupazione è la seguente: se il super utente (mentre impersona un altro utente) passa alla schermata principale e la parte superiore dello schermo dice "Ciao [Utente]", voglio che dica "Ciao [Utente impersonato]" come opposto a "Hello [Super User]". E temo che la soluzione di @ Jordão renderebbe più complessa l'implementazione di questa schermata e di altre schermate con requisiti simili.

È stato utile?

Soluzione

Non impersonare altri utenti, ma concedi ai super utenti autorizzazioni sufficienti e interfacce esclusive in modo che possano agire sui dati degli altri utenti.

Se poi disponi di dati di registrazione o di controllo, sai quale utente (normale o super) ha agito sui dati.

Altri suggerimenti

[Authorize(Roles = "Admin")]
public ActionResult Impersonate(string username)
{
    FormsAuthentication.SignOut();
    var cookie = FormsAuthentication.GetAuthCookie(username, false);
    Response.AppendCookie(cookie);
    return RedirectToAction("index");
}
.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top