我需要一些帮助,我正在制作基于角色的菜单。我正在使用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。
答案 0 :(得分:2)
您不必手动执行此操作。使用内置角色提供程序应该通过在web.config中设置它来完成任务。
Active Directory Membership Provider
更新:以下是有关StackOverflow的问题,其中包括使用ActiveDirectory成员资格提供程序进行设置,但仍使用表单身份验证。
答案 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")