Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 2 Web应用程序:允许超级用户模拟其他用户-是否有这样的设计模式? 在我的web应用程序中,我希望允许超级用户模拟其他用户_Asp.net Mvc 2_Design Patterns_Web Applications_Impersonation_Architectural Patterns - Fatal编程技术网

Asp.net mvc 2 Web应用程序:允许超级用户模拟其他用户-是否有这样的设计模式? 在我的web应用程序中,我希望允许超级用户模拟其他用户

Asp.net mvc 2 Web应用程序:允许超级用户模拟其他用户-是否有这样的设计模式? 在我的web应用程序中,我希望允许超级用户模拟其他用户,asp.net-mvc-2,design-patterns,web-applications,impersonation,architectural-patterns,Asp.net Mvc 2,Design Patterns,Web Applications,Impersonation,Architectural Patterns,我的问题: 是否有一个普遍接受的设计模式,我可以用来实现这一点 一般来说,我可以想象我需要在会话中跟踪当前用户和模拟用户 但是你可以理解,我想尽量减少这种变化带来的复杂性 顺便说一句,我的应用程序是一个ASP.NETMVC2应用程序,所以如果我可以利用任何现有的基础设施,那就太好了 编辑:我正在使用表单身份验证 编辑:我还需要跟踪超级用户代表其他用户行事的事实。我需要这样做有两个原因: 日志应该记录超级用户代表另一个用户行事的事实 可以想象超级用户希望返回模拟屏幕“切换上下文”并模拟另一个用户

我的问题:

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

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

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

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

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

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

  • 编辑:@Jordão提出了一项建议。我唯一担心的是,如果超级用户(在模拟另一个用户时)导航到主屏幕,并且屏幕顶部显示“Hello[user]”,我希望它显示“Hello[Impersonated user]”,而不是“Hello[super user]”。我担心@Jordão的解决方案会使此屏幕和其他具有类似需求的屏幕的实现更加复杂。

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

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

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

    不要这样做。它对安全和隐私有影响。你甚至可以说这是不道德的。@Jordão对于内部网应用程序,我们一直都在这样做——如果有人不在或被终止,允许其他人作为他们进入并处理他们队列中的某些事情,这是非常有帮助的。@Jordao,在很多客户服务场景中,您确实需要知道客户看到了什么。你不能对这些业务需求指手画脚。你的系统用户是否通过了AD认证?还是表单验证?会话中是否有用户对象/标识?“这很重要。”Nauman:我实际上遵循了Jord-Oo的建议,并敦促管理层考虑另一个解决方案。幸运的是,我们能够利用独家超级用户界面的优势销售它们。我们强调,模拟功能将非常昂贵和危险。好的。我假设您只需要在会话中使用另一个字段来跟踪这样一个事实,即这是一个超级用户,代表使用用户名指定的用户,对吗?@Jim G.,这将取决于您的需求,您是否需要跟踪这样的事情。