2015-12-30 2 views
2

Я пытался отобразить список ролей из Active Directory в C#, но единственные ответы, которые я нашел до сих пор, - это список ролей, привязанных к определенному пользователю, а не список всех ролей домена мудрый.Получить список ролей, домен с помощью Active Directory

Это фрагмент кода я нашел here

// set up domain context 
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain)) 
{ 
    // find a user 
    UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SomeUserName"); 

    if(user != null) 
    { 
     // get the authorization groups - those are the "roles" 
     var groups = user.GetAuthorizationGroups(); 

     foreach(Principal principal in groups) 
     { 
      // do something with the group (or role) in question 
     } 
    } 
} 

Как вы можете видеть, единственный способ, чтобы получить список ролей через использование UserPrincipal объекта, который связан с пользователем. Я хотел бы указать все возможные роли, которые могут быть назначены пользователю из определенного домена.

Кстати, я не очень хорошо знаю Иерархию пользователей/групп/ролей в Active Directory, поэтому я мог ошибаться, когда думал о том, как работает эта структура, допустим, роль - это просто особый вид группы.

ответ

0

Вы можете использовать PrincipalSearcher и «запрос по образцу» принципал сделать ваш поиск:

// create your domain context 
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain)) 
{ 
    // define a "query-by-example" principal - here, we search for a GroupPrincipal 
    GroupPrincipal qbeGroup = new GroupPrincipal(ctx); 

    // create your principal searcher passing in the QBE principal  
    PrincipalSearcher srch = new PrincipalSearcher(qbeGroup); 

    // find all matches 
    foreach(var found in srch.FindAll()) 
    { 
     // do whatever here - "found" is of type "Principal" - it could be user, group, computer.... 
    } 
} 

Этот поиск начинается на верхнем уровне подключенного домена, и перечислить все группы этот домен. Теперь это могут быть как группы безопасности, а также список рассылки групп - если вы хотите получить безопасности группы (которые действительно соответствуют «роли»), вы можете адаптировать свой поисковик, как это:

GroupPrincipal qbeGroup = new GroupPrincipal(ctx); 
qbeGroup.IsSecurityGroup = true; 

Посмотреть пространство имен MSDN documentation on the System.DirectoryServices.AccountManagement для более подробной информации.

+0

Спасибо, я протестировал его, и в нем перечислены те же группы, в которых я получал другой фрагмент. Кстати, нормально ли, если я устанавливаю qbeGroup.IsSecurityGroup = false, он возвращает пустой список? Я не знаю, нормально ли иметь «нормальные группы», и все они - группы безопасности. –

+0

@IvanMolinaHuerta: если вы установили 'IsSecurityGroup = false', то вы получите ** ** только ** (Exchange) группы распределения в вашем AD. Если у вас нет Exchange, настроенного на этом сервере, у вас может не быть ни одного из них - это вполне возможно –

Смежные вопросы