全局 asax 中的HttpContext.Current.User与操作方法中的HttpContext.User不同吗?我为用户分配了一些角色,但他们似乎迷路了。
下面的代码显示了正在发生的事情。当用户登录时,这两个断言都会被命中,首先是全局 asax,然后是 action 方法。然而,它们给出了不同的结果。
首先这个:
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
// ... omitted some code to check user is authenticated
FormsIdentity identity = (FormsIdentity)HttpContext.Current.User.Identity;
string[] roles = new string[] { "admin", "user" };
HttpContext.Current.User =
new System.Security.Principal.GenericPrincipal(identity, roles);
Assert(HttpContext.User.IsInRole("admin"));
}
然后在我的操作方法中:
public ActionResult Index()
{
bool isAdmin = HttpContext.User.IsInRole("admin");
Assert(isAdmin); // this fails, isAdmin is false
// ...
}
我使用了以下资源
http://csharpdotnetfreak.blogspot.com/2009/02/formsauthentication-ticket-roles-aspnet.html