我正在尝试获取特定用户的所有组,因为它在Active Directory“Member Of”组中列出。 我找到了一个代码,但它给了我所有的组,如果一个组包含很少的组,我得到那些组而不是包含它们的主组。我想得到列表,因为它没有“背景”组。
我在这里找到的代码:
public List<GroupPrincipal> GetGroups(string userName)
{
List<GroupPrincipal> result = new List<GroupPrincipal>();
// establish domain context
PrincipalContext yourDomain = new PrincipalContext(ContextType.Domain);
// find your user
UserPrincipal user = UserPrincipal.FindByIdentity(yourDomain, userName);
// if found - grab its groups
if(user != null)
{
PrincipalSearchResult<Principal> groups = user.GetAuthorizationGroups();
// iterate over all groups
foreach(Principal p in groups)
{
// make sure to add only group principals
if(p is GroupPrincipal)
{
result.Add((GroupPrincipal)p);
}
}
}
return result;
}
还没有找到有效的解决方案吗?
答案 0 :(得分:2)
GetAuthorizationGroups()
方法用于测试用户的安全权限。它告诉您用户有权获得返回组的所有安全权限。所以它确实为你提供了所有嵌套的安全组。
例如,如果用户是B组的成员,而B组在A组中,则该用户有权获得授予A组的权限,因此GetAuthorizationGroups()
将返回A组。
我认为您正在寻找的是GetGroups()
方法,该方法仅返回用户是其直接成员的组。
PrincipalSearchResult<Principal> groups = user.GetGroups();