Как получить коллекцию строк из тех групп, к которым принадлежит пользователь? - PullRequest
0 голосов
/ 03 апреля 2011
if (DomainHelpers.DomainExists(ConnectionString))
{
    using(var baseDirectory = new DirectoryEntry(ConnectionString))
    {
        baseDirectory.Username = Username;
        baseDirectory.Password = Password;

        using (DirectorySearcher searcher = new DirectorySearcher())
        {
            searcher.SearchRoot = baseDirectory;
            searcher.Filter = "(objectCategory=user)";
            searcher.SearchScope = SearchScope.Subtree;

            var userResults = searcher.FindAll();

            foreach (SearchResult user in userResults)
            {
                var newUser = new User();
                newUser.Name = user.Properties["name"][0].ToString();
                newUser.Path = user.Path;

                //.Groups is just a List<string>.
                newUser.Groups = user.Properties?????

                _users.Add(newUser);
            }
        }
    }
}

Как получить коллекцию групп, к которой принадлежит пользователь?

Спасибо! :)

Ответы [ 2 ]

1 голос
/ 03 апреля 2011
user.Properties["memberOf"]

не забудьте добавить searcher.PropertiesToLoad.Add("memberOf"); до ...searcher.FindAll()

Для заполнения вашей собственности:

//.Groups is just a List<string>.
foreach(object group in user.Properties["memberOf"])
    newUser.Groups.Add((string)group);
0 голосов
/ 03 апреля 2011

Вы должны использовать System.DirectoryServices.AccountManagement .Это намного проще.Вот хороший проект кода статья , который дает вам обзор всех классов в этой библиотеке.Прежде всего, получение атрибута memberOf не даст вам первичную группу.Кроме того, если у пользователя есть локальная группа домена из другого домена, она не будет отображаться в атрибуте memberOf.Вы можете проверить здесь для деталей.Вот как выглядит код, если вы переключитесь на использование System.DirectoryServices.AccountManagement.Следующий код может найти непосредственные группы, назначенные этому пользователю, включая первичную группу.

UserPrincipal user = UserPrincipal.FindByIdentity(new PrincipalContext (ContextType.Domain, "mydomain.com"), IdentityType.SamAccountName, "username");
foreach (GroupPrincipal group in user.GetGroups())
{
    Console.Out.WriteLine(group);
}
...