C # Получить все группы конкретного пользователя из Active Directory - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь получить все группы определенного пользователя, как это указано в группах 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 голосов
/ 31 мая 2018

Метод GetAuthorizationGroups() предназначен для проверки привилегий безопасности пользователя.Он говорит вам, что пользователь имеет право на все привилегии безопасности, которые дают возвращенные группы.Таким образом, он дает вам все вложенные группы безопасности.

Например, если пользователь является членом группы B, а группа B входит в группу A, то пользователь имеет право на привилегии, предоставленные группе Aпоэтому GetAuthorizationGroups() вернет группу A.

Я думаю, что вы ищете метод GetGroups(), который возвращает только те группы, в которых пользователь является непосредственным членом.

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