0

我们需要在新项目上使用 Windows 身份验证。因此,我们将在动作方法上使用 AuthorizeAttribute,也许还会在有限数量的控制器动作中使用。

效果很好,当然。但是要对此进行测试(无论是在单元测试中,还是在我集成这些东西时进行手动测试),我需要能够模拟具有任何角色的用户,并在不同角色之间频繁地来回切换。

我无法修改控制器的 User 对象(它是只读的),所以我可以从哪里插入一个实现 IPrincipal 的假用户,该用户可以在我的应用程序的任何地方访问,包括:

  • 在控制器动作中
  • 在自定义属性中

我还没有深入研究 DI 框架——此时有必要吗?如果您强烈推荐,我仍然想知道如何通过“穷人”的 DI 做到这一点。

4

1 回答 1

3

global.asax/ Application_PostAuthenticateRequest(object sender, EventArgs e)

在 ASP.NET 对主体感到满意后调用该方法。

如果您只想提供自己的角色,则可以实现 aRoleProvider代替。

更新

你可以这样做:

public void Application_PostAuthenticateRequest(object sender, EventArgs e)
{
    var principal = LoadFromTheDb();
    HttpContext.Current.User = Thread.CurrentPrincipal = principal;
}

然后你可以在任何你喜欢的地方使用那个主体。

如果您已runAllManagedModulesForAllRequests在 web.config 中启用,您可能应该先检查用户是否经过身份验证,然后再执行其他任何操作。

于 2012-11-09T14:26:21.650 回答