在MVC上设置用户角色

时间:2013-02-27 21:08:23

标签: asp.net-mvc active-directory roles

我需要一些帮助,我正在制作基于角色的菜单。我正在使用LDAP Active Directory登录。

我可以登录,但我无法从AD群中获得角色。

我尝试使用角色提供程序,但无法使其工作。我使用以下方式获取小组:

private ArrayList setRoles()
{
    ArrayList rolesList = new ArrayList();
    DirectoryEntry de = new DirectoryEntry("LDAP://**********");
    DirectorySearcher ds = new DirectorySearcher(de);
    ds.PropertiesToLoad.Add("memberOf");
    ds.SearchScope = SearchScope.Subtree;
    ds.Filter = "(sAMAccountName=test)"; // your username

    SearchResult result = ds.FindOne();

    foreach (string g in result.Properties["memberOf"])
        rolesList.Add(g);
    return rolesList;
}

现在,我需要在某处“设置”角色才能使用

User.IsInRole("Admin")

[Authorize role...]
public bla bla bla()

任何想法,链接等?

PD:IM使用表格AUTH。

2 个答案:

答案 0 :(得分:2)

您不必手动执行此操作。使用内置角色提供程序应该通过在web.config中设置它来完成任务。

Active Directory Membership Provider

Windows Token Role Provider

更新:以下是有关StackOverflow的问题,其中包括使用ActiveDirectory成员资格提供程序进行设置,但仍使用表单身份验证。

ASP.NET MVC - Authenticate users against Active Directory, but require username and password to be inputted

答案 1 :(得分:1)

我没有使用AD的经验,但是,您需要做的是使用具有角色的Principal设置HttpContext的User属性。

我之前创建的方法是创建一个继承自AuthorizationAttribute的自定义授权属性。

public class AuthorizeActiveDirectoryAttribute : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        var user = filterContext.HttpContext.User;

        //Your code to get the list of roles for the current user

        var formsIdentity = filterContext.HttpContext.User.Identity as FormsIdentity;
        filterContext.HttpContext.User = new System.Security.Principal.GenericPrincipal(formsIdentity, rolesList.ToArray());

        base.OnAuthorization(filterContext);
    }

}

然后,您可以将其应用于您的操作方法

[AuthorizeActiveDirectory role...]
public bla bla bla()

这也允许您使用User.IsInRole("Admin")