Определить вложенные группы экземпляра WindowsIdentity - PullRequest
4 голосов
/ 26 января 2011

Скажем, у меня есть экземпляр WindowsIdentity и я хочу получить группы, членом которых он является Я использую следующий код для получения списка:

  WindowsIdentity identity = null;
  // get identity here
  identity.Groups.Translate(typeof(NTAccount)).Select(x => x.Value);

я получаю что-то вроде этого:

 "BUILTIN\\Administrators"
 "BUILTIN\\Users"
 "NT AUTHORITY\\INTERACTIVE"
 "CONSOLE LOGON"

У меня есть локальная группа (скажем, MYSPECIALGROUP), в которой BUILTIN\\Administrators является ее членом. MYSPECIALGROUP не возвращается в приведенном выше примере. Как мне получить все группы, включая вложенные?

1 Ответ

3 голосов
/ 29 марта 2011

Получение членства в группах пользователей из Active Directory

Как объясняется в ответе на этот вопрос, System.DirectoryServices.AccountManagement пространство имен - это то, что вам нужно:

// get the user identity / roles
PrincipalContext pCtx = new PrincipalContext(ContextType.Domain, 
    Settings.Default.Domain,          // domain
    Settings.Default.DomainReadUser,  // user to access AD with 
    Settings.Default.DomainReadPass); // password of that user

UserPrincipal user = UserPrincipal.FindByIdentity(pCtx, 
    User.Identity.Name.Split('\\').Last()); // Windows Auth current user

// this will have all of the security groups, even nested ones
IEnumerable<Principal> userRoles = user.GetAuthorizationGroups();

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

PrincipalContext pCtx = new PrincipalContext(ContextType.Machine);
UserPrincipal user = UserPrincipal.FindByIdentity(pCtx, 
    identity.Name.Split('\\').Last());

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

...