Узнайте, входит ли группа в AD в группу рассылки? - PullRequest
7 голосов
/ 01 ноября 2011

Я использую ASP.net с C # и очень мало знаю об Active Directory.Мне было дано задание написать программу в следующих шагах:

Приложению ASP.net присваивается имя пользователя.

Приложение должно запросить все группы пользователей с заданным именем пользователя.

Затем приложение должно отобразить эти группы в двух отдельных списках, один из которых состоит из групп рассылки, а в другом списке -остальные группы.

Теперь запросы для всех групп просты.Но как я могу проверить, входит ли группа в группу рассылки или нет?

Мне не дали больше информации.

Любой атрибут или что-то, что я могу проверить?

Ответы [ 3 ]

3 голосов
/ 01 ноября 2011

Поскольку вы работаете в .NET 3.5 и выше, вам следует проверить пространство имен System.DirectoryServices.AccountManagement (S.DS.AM). Читайте все об этом здесь:

По сути, вы можете определить контекст домена и легко находить пользователей и / или группы в AD:

// set up domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

// find a user
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SomeUserName");

if(user != null)
{ 
   // get all roles for that user
   var roles = user.GetGroups();

   // set up two lists for each type of groups
   List<GroupPrincipal> securityGroups = new List<GroupPrincipal>();
   List<GroupPrincipal> distributionGroups = new List<GroupPrincipal>();

   // iterate over groups found
   foreach (Principal p in roles)
   {
       // cast to GroupPrincipal
       GroupPrincipal gp = (p as GroupPrincipal);

       if (gp != null)
       {
           // check whether it's a security group or a distribution group
           if (gp.IsSecurityGroup)
              securityGroups.Add(gp);
           else
              distributionGroups.Add(gp);
       }
    }
}

Новый S.DS.AM позволяет очень легко играть с пользователями и группами в AD!

3 голосов
/ 19 марта 2013

Этот код будет извлекать все группы, для которых включена электронная почта, независимо от того, является ли это группа безопасности или группа рассылки. (Видя ваш комментарий к ответу marc_s, я думаю, это именно то, что ищут ваши менеджеры).

using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
{
    Principal prototype = new GroupPrincipal(ctx);
    PrincipalSearcher searcher = new PrincipalSearcher(prototype);
    List<string> groupNames = new List<string>();
    PropertyValueCollection email;

    foreach (var gp in searcher.FindAll()) using (gp)
    {
        GroupPrincipal group = gp as GroupPrincipal;

        using (DirectoryEntry groupEntry = ((DirectoryEntry)group.GetUnderlyingObject())
        {
          email = groupEntry.Properties["mail"];
          if (email.Value != null)
          {
            groupNames.Add(group.Name);
          }
        }
    }
}
3 голосов
/ 01 ноября 2011

Вы можете получить эту информацию из атрибута с именем Groupe-Type (последняя строка).

(0x00000001) : Specifies a group that is created by the system.
(0x00000002) : Specifies a group with global scope.
(0x00000004) : Specifies a group with domain local scope.
(0x00000008) : Specifies a group with universal scope.
(0x00000010) : Specifies an APP_BASIC group for Windows Server Authorization Manager.
(0x00000020) : Specifies an APP_QUERY group fir Windows Server Authorization Manager.
(0x80000000) :Specifies a security group. If this flag is not set, then the group is a distribution group.

Вы можете найти в этот ответ или на это еще один другой способ получения групп, к которым принадлежит пользователь.

Здесь можно найти , как получить пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...