Pergunta

  • Em meu aplicativo da web, gostaria de permitir que superusuários se passassem por outros usuários.

Minha pergunta:

Existe um padrão de design geralmente aceito que eu possa usar para fazer isso acontecer?

  1. De modo geral, posso imaginar que precisarei acompanhar o usuário atual e o usuário representado dentro da sessão.
  2. Mas você pode entender que eu gostaria de minimizar a complexidade associada a essa mudança.

  3. Aliás, meu aplicativo é um aplicativo ASP.NET MVC 2, então se eu pudesse aproveitar qualquer infraestrutura existente, seria ótimo.

EDITAR: Estou usando a autenticação de formulários.

EDITAR: Também precisarei rastrear o fato de que um superusuário está agindo em nome de outro usuário.Vou precisar fazer isso por dois motivos:

  1. O registro deve registrar o fato de que um superusuário agiu em nome de outro usuário.
  2. É concebível que o superusuário queira retornar à tela de representação para “mudar de contexto” e se passar por outro usuário.

EDITAR: @Jordão propôs um solução principalmente viável.Minha única preocupação é a seguinte: se o superusuário (enquanto se faz passar por outro usuário) navegar para a tela inicial e a parte superior da tela disser 'Olá [usuário]', quero dizer 'Olá [usuário personificado]' como oposto a 'Olá [Superusuário]'.E temo que a solução do @Jordão torne mais complexa a implementação desta tela e de outras telas com requisitos semelhantes.

Foi útil?

Solução

Não se faça passar por outros usuários, mas dê aos superusuários autorizações suficientes e interfaces exclusivas para que eles possam agir com base nos dados dos outros usuários.

Se você tiver dados de registro ou auditoria, saberá qual usuário (normal ou super) agiu com base nos dados.

Outras dicas

[Authorize(Roles = "Admin")]
public ActionResult Impersonate(string username)
{
    FormsAuthentication.SignOut();
    var cookie = FormsAuthentication.GetAuthCookie(username, false);
    Response.AppendCookie(cookie);
    return RedirectToAction("index");
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top