2013-12-16 4 views
1

Учитывая следующий .Net рекурсивного кода:Безопасно ли получить все группы AD для принципала с рекурсией?

public void FindAllGroups(PrincipalSearchResult<Principal> groups) 
{ 
    foreach (Principal p in groups.ToList()) 
    { 
     PrincipalSearchResult<Principal> childGroups = p.GetGroups(); 
     if (childGroups.Count() > 0) 
     { 
      FindAllGroups(childGroups); 
     } 
    } 
} 

Есть ли риск, что этот код будет конец вверх рекурсия навсегда?

Положите его как объект Active Directory, возможно ли иметь циклы в вложенных группах в AD?

GetGroups() правильный способ сделать то, что я хочу: Список всех групп?

Я совершенно не уверен, как группы могут быть связаны друг с другом и были бы благодарны, если бы кто-то мог связать мне любую часть документации, которая объясняет это дело (я не нашел его сам).

ответ

1

основе this question затем:

возможно иметь циклов во вложенных групп в AD?

будет ДА.

Поэтому вам необходимо избегать обработки одной и той же группы в другое время (например, сохранить список, возможно, HashSet групп, уже обработанных и проверять перед рекурсированием).

+0

Хорошо. Тогда у групп могут быть какие-то отношения? Например, две группы могут «владеть» одной и той же группой? –

+0

Это глупый вопрос от меня, ответ: Конечно. Поскольку пользователи могут принадлежать нескольким группам, группа также может принадлежать нескольким группам. Спасибо за ваше время! –

+1

@thibaultd В основном да (IIRC), но есть исключения. Например. Собственность и «Управляемые» являются единственными. – Richard

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