Pregunta

  • En mi aplicación web, me gustaría permitir que los superusuarios se hagan pasar por otros usuarios.

Mi pregunta:

¿Existe un patrón de diseño generalmente aceptado que pueda utilizar para que esto suceda?

  1. En términos generales, puedo imaginar que tendré que realizar un seguimiento del usuario actual y del usuario suplantado dentro de la sesión.
  2. Pero puede comprender que me gustaría minimizar la complejidad asociada a este cambio.

  3. Por cierto, mi aplicación es una aplicación ASP.NET MVC 2, así que si pudiera aprovechar cualquier infraestructura existente, sería genial.

EDITAR: estoy usando autenticación de formularios.

EDITAR: también tendré que hacer un seguimiento del hecho de que un superusuario actúa en nombre de otro usuario. Necesitaré hacer esto por dos razones:

  1. El registro debe registrar el hecho de que un superusuario actuó en nombre de otro usuario.
  2. Es concebible que el superusuario quiera volver a la pantalla de suplantación de identidad para "cambiar de contexto" y hacerse pasar por otro usuario.

EDITAR: @ Jordão propuso un solución prácticamente viable . Mi única preocupación es la siguiente: si el superusuario (mientras se hace pasar por otro usuario) navega a la pantalla de inicio y la parte superior de la pantalla dice "Hola [Usuario]", quiero que diga "Hola [Usuario suplantado]" como opuesto a 'Hola [superusuario]'. Y me temo que la solución de @ Jordão haría más compleja la implementación de esta pantalla y otras pantallas con requisitos similares.

¿Fue útil?

Solución

No hagas personales de otros usuarios, sino que le dan a los Super Usuarios suficientes autorizaciones y interfaces exclusivas para que puedan actuar sobre los datos de otros usuarios.

Si tiene datos de registro o auditoría, sabe que el usuario (normal o super) actuó sobre los datos.

Otros consejos

[Authorize(Roles = "Admin")]
public ActionResult Impersonate(string username)
{
    FormsAuthentication.SignOut();
    var cookie = FormsAuthentication.GetAuthCookie(username, false);
    Response.AppendCookie(cookie);
    return RedirectToAction("index");
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top