从HttpContextBase获取角色

时间:2011-02-25 09:13:15

标签: asp.net asp.net-mvc role

有一种方法可以从HttpContextBase中获取角色数组吗?

我正在寻找这样的课程:

    public static IList<string> GetUserRoles(this HttpContextBase context)
    {
        if (context != null)
        {

        }

        // return roles array;
    }

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

您可以使用:

System.Web.Security.Roles.GetAllRoles()

你想用什么原因来使用HttpContextBase?

*编辑* 哎呀,我现在看到你想要给定用户的角色列表。 我以为你想要所有可用角色的列表。

你可以遍历角色并检查适用的角色:

HttpContextBase.User.IsInRole(role);

答案 1 :(得分:2)

可能你在Application_AuthenticateRequest中使用GenericPrincipal。我建议你创建一个公开一系列角色的自定义主体:

public class CustomPrincipal: IPrincipal
{
    public CustomPrincipal(IIdentity identity, string[] roles)
    {
        this.Identity = identity;
        this.Roles = roles;
    }

    public IIdentity Identity
    {
        get;
        private set;
    }

    public string[] Roles
    {
        get;
        private set;
    }

    public bool IsInRole(string role)
    {
        return (Array.BinarySearch(this.Roles, role) >= 0 ? true : false);  
    }
} 

现在您可以阅读您的cookie并创建自定义主体。

    protected void Application_AuthenticateRequest(Object sender, EventArgs e)
    {
        HttpCookie authCookie = Request.Cookies[My.Application.FORMS_COOKIE_NAME];
        if ((authCookie != null) && (authCookie.Value != null))
        {
            var identity = new GenericIdentity(authTicket.Name, "FormAuthentication");
            var principal = new CustomPrincipal(identity, Roles, Code);
            Context.User = principal;
        }
    }

你的功能看起来像这样:

    public static IList<string> GetUserRoles(this HttpContextBase context)
    {
        if (context != null)
        {
            return(((CustomPrincipal)context.User).Roles);
        }

        return (null);
        // return roles array;
    }