В моем Active Directory (my.domain) у меня много групп (UserGrp1, UserGrp2 и т. Д.), В которых много пользователей. Пользователь может существовать в нескольких группах. В настоящее время у меня есть код, который позволяет мне использовать класс GroupPrincipal для поиска группы, а затем оттуда получить всех членов этой группы (см. Код ниже). Однако мне действительно нужно найти все группы, к которым принадлежит пользователь. Например, у меня есть пользователь домена с именем Joe Test (sAMAccountName = JOETEST), и мне нужно найти все группы, к которым он принадлежит , Каков наилучший способ сделать это?
Я могу определить, принадлежит ли пользователь группе (как показано ниже), прокручиваю ли я все члены, возвращенные методом GetMembers (), но это кажется мне неэффективным, и я был бы удивлен, если бы не было более эффективного способа .
using (PrincipalContext ctx = new PrincipalContext(
ContextType.Domain, "my.domain", "DC=my,DC=domain")) {
if (ctx != null) {
using (GroupPrincipal gp = GroupPrincipal.FindByIdentity(ctx, "UserGrp1")) {
// Get all group members
PrincipalSearchResult<Principal> psr = gp.GetMembers();
foreach (Principal p in psr) {
// other logic
}
}
}
}
Заранее спасибо за любую помощь, которую я получаю по этому вопросу.