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

我的问题:

是否有一种普遍接受的设计模式可以用来实现这一点?

  1. 一般来说,我可以想象我需要在会话中跟踪当前用户和模拟用户。
  2. 但是您可以理解,我想尽量减少与此更改相关的复杂性。

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

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

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

  1. 日志记录应该记录一个超级用户代表另一个用户行事的事实。
  2. 可以想象,超级用户想要返回模拟屏幕以“切换上下文”并模拟另一个用户。

编辑: @Jordão 提出了一个最可行的解决方案。我唯一关心的是以下问题 - 如果超级用户(在模拟其他用户时)导航到主屏幕,并且屏幕顶部显示“Hello [User]”,我希望它说“Hello [Impersonated User]”为反对“你好[超级用户]”。而且我担心@Jordão 的解决方案会使这个屏幕和其他具有类似要求的屏幕的实现更加复杂。

4

2 回答 2

2

不要冒充其他用户,而是给超级用户足够的权限和独占接口,以便他们可以对其他用户的数据进行操作。

如果您随后拥有日志记录或审计数据,您就会知道哪个用户(普通用户或超级用户)对数据进行了操作。

于 2011-02-04T18:34:12.763 回答
0
[Authorize(Roles = "Admin")]
public ActionResult Impersonate(string username)
{
    FormsAuthentication.SignOut();
    var cookie = FormsAuthentication.GetAuthCookie(username, false);
    Response.AppendCookie(cookie);
    return RedirectToAction("index");
}
于 2011-02-04T18:30:34.450 回答