Получить список групп для данного UserPrincipal
Я хочу получить список групп, в которых находится пользователь.
Это мой код:
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "mydomain.ac.uk", "DC=mydomain,DC=AC,DC=UK", "user", "password");
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, "MyUser");
PrincipalSearchResult<Principal> results = user.GetGroups();
foreach(Principal p in results)
{
Response.Write(p.Name);
}
Когда я бегу, я получаю следующую ошибку в строке Response.Write(p.Name);
System.Runtime.InteropServices.COMException: указанный атрибут службы каталогов или значение не существует.
Когда я проверил количество результатов, он вернул 9 и первая группа DomainUsers
,
Как я могу перебрать все 9 групп в списке? Благодарю.
Ниже приведен список пользователей, которых я получаю:
2 ответа
При пропуске свойства контейнера LDAP, как описано в классе PrincipalContext, пользователь, выполняющий код, должен иметь разрешения на чтение для обоих по умолчанию. User
Контейнер (то есть CN=Users,DC=yourDomain,DC=COM
) и Computers
Контейнер (то есть CN=Computers,DC=yourDomain,DC=COM
).
Если у пользователя нет необходимых разрешений, вы получите следующие сообщения об ошибках:
Указанный атрибут службы каталогов или значение не существует
"context.Container" выдал исключение типа "System.NullReferenceException" string {System.NullReferenceException}
((новый System.Linq.SystemCore_EnumerableDebugView(groups)).Items[5]).Description 'вызвал исключение типа' System.Runtime.InteropServices.COMException 'string {System.Runtime.InteropServices.COMException}
Пожалуйста, проверьте мой пост в блоге Проблемы с аутентификацией с PrincipalContext
Попробуй что-то вроде
foreach(Principal p in results)
{
if (p is GroupPrincipal)
Response.Write(p.DisplayName);
}
Я знаю, это звучит глупо, но это работало на меня в прошлом. Ваши результаты выглядят так, как будто на самом деле найдено только 1 группу безопасности и 8 "других" групп. Эти "другие" группы могут не обладать этими атрибутами.