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

La mia domanda:Applicazioni Web: consentire ai super utenti di impersonare altri utenti - Esiste un modello di progettazione per questo?

C'è un modello di progettazione generalmente accettato che potrei usare per fare questo accadere?

  1. In generale, posso immaginare che avrò bisogno di tenere traccia di l'utente corrente e l'utente rappresentato all'interno della sessione.
  2. Ma puoi capire che mi piacerebbe ridurre al minimo la complessità associata a questo cambiamento.

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

EDIT: sto usando autenticazione moduli.

MODIFICA: Devo anche tenere traccia del fatto che un super utente agisce per conto di un altro utente. Dovrò 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 una mostly workable solution. La mia unica preoccupazione è la seguente: se il superutente (mentre impersona un altro utente) naviga verso la schermata principale e la parte superiore dello schermo dice "Ciao [utente]", voglio dire "Ciao [Impersonated User]" come contrario a "Hello [Super User]". E temo che la soluzione di @ Jordão renderebbe più complessa l'implementazione di questo schermo e di altri schermi con requisiti simili.

+1

Non farlo. Ha implicazioni sulla sicurezza e sulla privacy. Potresti anche dire che non è etico. –

+0

@ Jordão per le applicazioni intranet lo facciamo sempre: è molto utile se qualcuno è lontano o è stato interrotto per permettere a qualcun altro di entrare come loro e occuparsi di qualcosa nella loro coda. – Sean

+2

@Jordao, ci sono un sacco di scenari di servizio al cliente in cui * davvero * è necessario sapere cosa vede il cliente. Non puoi semplicemente agitare il dito su quei requisiti aziendali. –

risposta

2

Non impersonare altri utenti, ma indica il super-utenti sufficienti autorizzazioni e interfacce esclusivi in ​​modo che possano agire sui dati degli altri utenti.

Se si dispone di dati di registrazione o di controllo, è possibile sapere quale utente (normale o super) ha agito sui dati.

0
[Authorize(Roles = "Admin")] 
public ActionResult Impersonate(string username) 
{ 
    FormsAuthentication.SignOut(); 
    var cookie = FormsAuthentication.GetAuthCookie(username, false); 
    Response.AppendCookie(cookie); 
    return RedirectToAction("index"); 
} 
+0

OK. E suppongo che tu abbia solo bisogno di un altro campo in sessione per tenere traccia del fatto che questo è un super utente che agisce per conto dell'utente specificato con nome utente, corretto? –

+0

@Jim G., questo dipenderà dalle tue esigenze, sia che tu debba tenere traccia di tale cosa. –