在控制器中设置用户角色?

时间:2010-10-14 07:12:19

标签: asp.net-mvc roles

我需要能够在我的控制器中手动授权我的用户 我从AD获得身份验证,然后在我的控制器中获得身份验证 我想要映射 我从AD获取的userID到我的应用程序的内部用户ID 从UserRole表中获取userId,然后在控制器中设置它,但是, 我不知道如何在控制器中设置角色?

我在家里的控制器上尝试过这样做:
HttpContext.User = new System.Security.Principal.GenericPrincipal(User.Identity,roleName);

roleName设置为“Admin”,但这似乎不起作用,因为它始终无法授权。

请帮忙吗?....

1 个答案:

答案 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;
    }
}