C#从Active Directory获取所有特定用户组

时间:2018-05-30 17:53:28

标签: c# active-directory usergroups

我正在尝试获取特定用户的所有组,因为它在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;
}

还没有找到有效的解决方案吗?

1 个答案:

答案 0 :(得分:2)

GetAuthorizationGroups()方法用于测试用户的安全权限。它告诉您用户有权获得返回组的所有安全权限。所以它确实为你提供了所有嵌套的安全组。

例如,如果用户是B组的成员,而B组在A组中,则该用户有权获得授予A组的权限,因此GetAuthorizationGroups()将返回A组。

我认为您正在寻找的是GetGroups()方法,该方法仅返回用户是其直接成员的组。

PrincipalSearchResult<Principal> groups = user.GetGroups();