Запросить активный каталог, чтобы получить роли пользователя в .NET - PullRequest
4 голосов
/ 06 июня 2011

Я немного использовал Linq для Active Directory , но мне трудно получить список всех ролей, членом которых является пользователь. Я могу получить список их непосредственных групп, но он не является рекурсивным.

Причина, по которой я пытаюсь запросить каталог AD, заключается в том, чтобы обойти встроенный Role Manager AspNetWindowsTokenRoleProvider, который не позволяет вызывать Roles.GetRolesForUser (имя пользователя), если имя пользователя не соответствует текущей идентичности Windows.

Ответы [ 2 ]

19 голосов
/ 06 июня 2011

Если вы используете .NET 3.5 и выше, вы должны проверить пространство имен System.DirectoryServices.AccountManagement (S.DS.AM).Узнайте все об этом здесь:

Управление принципами безопасности каталогов в .NET Framework 3.5

По сути, вы можете определить контекст домена и легко находить пользователей и / или группыв AD:

// set up domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

// find a user
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SomeUserName");

if(user != null)
{
   // find the roles....
   var roles = user.GetAuthorizationGroups();

   // enumerate over them
   foreach (Principal p in roles)
   {
       // do something
   }
}

Новый S.DS.AM позволяет очень легко играть с пользователями и группами в AD:

1 голос
/ 06 июня 2011

Вы смотрели на это ?

...