我正在尝试获取特定用户的所有组,因为它列在Active Directory"成员"组中。 我找到了一个代码,但它给了我所有的组,如果一个组包含几个组,我会得到这些组而不是包含它们的主要组。我想在没有"背景"组的情况下获取列表。
我在这里找到的代码:
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;
}
还没有找到可行的解决方案,知道吗?
>GetAuthorizationGroups()
方法用于测试用户的安全权限。它告诉您用户有权获得返回的组获得的所有安全特权。因此,它确实为您提供了所有嵌套的安全组。
例如,如果用户是组 B 的成员,而组 B 在组 A 中,则用户有权获得授予组 A 的权限,因此GetAuthorizationGroups()
将返回组 A。
我认为您要查找的是GetGroups()
方法,该方法仅返回用户是其直接成员的组。
PrincipalSearchResult<Principal> groups = user.GetGroups();