我需要能够在我的控制器中手动授权我的用户 我从AD获得身份验证,然后在我的控制器中获得身份验证 我想要映射 我从AD获取的userID到我的应用程序的内部用户ID 从UserRole表中获取userId,然后在控制器中设置它,但是, 我不知道如何在控制器中设置角色?
我在家里的控制器上尝试过这样做:
HttpContext.User = new System.Security.Principal.GenericPrincipal(User.Identity,roleName);
roleName设置为“Admin”,但这似乎不起作用,因为它始终无法授权。
请帮忙吗?....
答案 0 :(得分:3)
假设您在控制器方法中使用[Authorize]
,这将在操作方法之前运行,因此无法访问您必须设置角色名称的代码 - 它需要是在调用控制器之前设置。
将这样的方法添加到Global.asax:
protected void Application_OnPostAuthenticateRequest(Object sender, EventArgs e)
{
IPrincipal contextUser = Context.User;
if (contextUser.Identity.AuthenticationType == "Forms")
{
// determine role name
// attach to context
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(User.Identity, roleName);
Thread.CurrentPrincipal = HttpContext.Current.User;
}
}