C# 以字符串[]返回用户所属的所有Active Directory组的列表
我需要以字符串[]返回用户所属的所有Active Directory组,以便在通用主体中使用结果 我不确定是否要投出结果?请帮忙C# 以字符串[]返回用户所属的所有Active Directory组的列表,c#,asp.net-mvc-3,asp.net-mvc-4,c#-4.0,active-directory,C#,Asp.net Mvc 3,Asp.net Mvc 4,C# 4.0,Active Directory,我需要以字符串[]返回用户所属的所有Active Directory组,以便在通用主体中使用结果 我不确定是否要投出结果?请帮忙 string[] roles = new string[] { helper.GetActiveDirectoryGroups(User.Identity.Name) }; GenericPrincipal principal = new GenericPrincipal(identity,roles); public string[] GetActiveD
string[] roles = new string[] {
helper.GetActiveDirectoryGroups(User.Identity.Name) };
GenericPrincipal principal = new GenericPrincipal(identity,roles);
public string[] GetActiveDirectoryGroups(string userName)
{
//code here
}
这应该能奏效
using System.DirectoryServices.AccountManagement;
public static string[] GetGroups(string username)
{
string[] output = null;
using (var ctx = new PrincipalContext(ContextType.Domain))
using (var user = UserPrincipal.FindByIdentity(ctx, username))
{
if (user != null)
{
output = user.GetGroups() //this returns a collection of principal objects
.Select(x => x.SamAccountName) // select the name. you may change this to choose the display name or whatever you want
.ToArray(); // convert to string array
}
}
return output;
}
如果您希望在用户属于某个组时返回布尔值,请执行以下操作:
string[] output = null;
using (var ctx = new PrincipalContext(ContextType.Domain, domain))
using (var user = UserPrincipal.FindByIdentity(ctx, username))
{
if (user != null)
{
output = user.GetGroups()
.Select(x => x.SamAccountName)
.ToArray();
}
bool isMember = output.Any(groupName.Contains);
}
“如何在Active Directory中获取用户组”的可能重复项很有帮助,但它返回一个数组列表。我需要一个字符串[]来满足我的要求。有什么想法吗???你可以写一个linq查询来从列表中获取广告组的名称。是的,大卫!正是我想要的。ToArray()将主要对象的集合转换为字符串数组。工作起来很有魅力!除了不递归地检查组之外,这也可以使用。如果要获取所有嵌套组,而不是GetGroups(),请使用GetAuthorizationGroups()