假设我有一个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"
我有一个以BUILTIN\\Administrators
作为其成员的本地组(例如MYSPECIALGROUP
)。 上面的示例中不返回MYSPECIALGROUP
。 我如何获得包括嵌套组的所有组?
从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中管理目录安全主体