2012-04-20 4 views
8

Я хочу, чтобы получить список групп, которые пользователь находится вПолучить список групп для данного 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 групп в списке? Благодарю.

Ниже приведен список пользователей, я получаю:

enter image description here

+0

как вы инициализируете PrincipalContext? – Damith

+0

PrincipalContext ctx = new PrincipalContext (ContextType.Domain, "mydomain.ac.uk", "DC = mydomain, DC = AC, DC = UK", "user", "password"); – TTCG

+0

Атрибут name может быть не заполнен (возможно, потому, что он был из другого домена, чем тот, который вы запросили?). Попробуйте запросить имя DisplayName или DistinguishedName или SamAccountName или SID. – Ben

ответ

1

попробовать что-то вроде

foreach(Principal p in results) 
{ 
    if (p is GroupPrincipal) 
     Response.Write(p.DisplayName); 
} 

Я знаю, это звучит немой, но он работал для меня в прошлом. Ваши результаты выглядят так, что на самом деле были найдены только 1 группа безопасности и 8 «других» типов групп. Эти «другие» группы могут не обладать этими атрибутами.

+0

Для меня имя было лучше (DisplayName was empty: 'user.GetGroups(). OfType (). Выберите (p => p.Name));' –

5

При опуская контейнер свойства LDAP, как описано в PrincipalContext классе, пользователь работает код должен иметь разрешений на чтение как по умолчанию User контейнера (т.е. в CN=Users,DC=yourDomain,DC=COM) и Computers контейнера (т.е. CN=Computers,DC=yourDomain,DC=COM).

Если пользователь не имеет необходимых разрешений, вы получите следующие сообщения об ошибках:

Указанный атрибут службы каталогов или значение не существует

  • «context.Container» бросил исключение типа 'System.NullReferenceException' строка {System.NullReferenceException}

  • ((новая система System.Linq.SystemCo re_EnumerableDebugView (группы)). Элементы [5]). Описание» сгенерировала исключение типа '' System.Runtime.InteropServices.COMException строка {} System.Runtime.InteropServices.COMException

Пожалуйста, проверьте мой блог Authentication Problems with PrincipalContext

+0

Если кто-то удаляет контейнер компьютеров в домене в вопрос, вы получите эту ошибку. Ради всего святого ... Кто-то удалил вещь. –

+0

Любой, кто пытается использовать 'this.RequestContext.Principal.IsInRole (« имя группы объявлений »)' и всегда возвращает false, без исключения, это возможная причина. Восстановление CN и прав исправлено для меня. –

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