Web应用程序:允许超级用户冒充其他用户 - 是否有针对此的设计模式?

时间:2011-02-04 18:25:18

标签: asp.net-mvc-2 design-patterns web-applications impersonation architectural-patterns

  • 在我的网络应用程序中,我想允许超级用户冒充其他用户。

我的问题:

  

我是否可以使用普遍接受的设计模式来实现这一目标?

  1. 一般来说,我可以想象我需要跟踪当前用户和会话中的模拟用户。
  2. 但是你可以理解我希望尽量减少这种变化带来的复杂性。

  3. 顺便说一下,我的应用程序是一个ASP.NET MVC 2应用程序,所以如果我可以利用任何现有的基础设施,那就太棒了。

  4. 编辑:我正在使用表单身份验证。

    编辑:我还需要跟踪超级​​用户代表其他用户行事的事实。我需要这样做有两个原因:

    1. 记录应记录超级用户代表其他用户行事的事实。
    2. 可以想象超级用户想要返回模拟屏幕以“切换上下文”并冒充其他用户。
    3. 编辑: @Jordão提出mostly workable solution。我唯一担心的是 - 如果超级用户(模仿另一个用户)导航到主屏幕,并且屏幕顶部显示'Hello [User]',我希望它说'Hello [模拟用户]'为反对'你好[超级用户]'。而且我担心@Jordão的解决方案会使这个屏幕和其他具有类似要求的屏幕的实现变得更加复杂。

2 个答案:

答案 0 :(得分:2)

不要冒充其他用户,而应为超级用户提供足够的授权和独占接口,以便他们可以对其他用户的数据采取行动。

如果您有日志记录或审核数据,您就知道哪个用户(正常或超级)对数据采取了行动。

答案 1 :(得分:0)

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