如何从C# .NET的活动目录中获取用户的用户组。在我的场景中,我希望将用户名传递给从LDAP Active directory查询的方法,并告诉我我的用户是此用户组的成员。在这方面请帮帮我
发布于 2011-03-10 05:45:29
如果您使用的是.NET 3.5或更高版本,则还可以使用新的System.DirectoryServices.AccountManagement
(S.DS.AM)名称空间。
使用此命令,您可以执行以下操作:
// create context for domain
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
// find the user
UserPrincipal up = UserPrincipal.FindByIdentity(ctx, "YourUserName");
if(up != null)
{
// get groups for that user
var authGroups = up.GetAuthorizationGroups();
}
阅读有关新的S.DS.AM名称空间的更多信息:
Managing Directory Security Principals in the .NET Framework 3.5
发布于 2011-03-10 05:08:41
研究一下如何使用System.DirectoryServices名称空间。您可以使用DirectorySearcher查找用户。拥有该用户的DirectoryEntry对象后,请执行以下操作:
public List<string> GetMemberOf(DirectoryEntry de)
{
List<string> memberof = new List<string>();
foreach (object oMember in de.Properties["memberOf"])
{
memberof.Add(oMember.ToString());
}
return memberof;
}
这将返回一个字符串列表,这些字符串是用户所属的组名。
当然,您还可以进一步改进以包含DirectorySearcher代码,这样就可以只将samAccountName传递给函数。
发布于 2011-08-12 21:50:43
试试这个。
public override string[] GetRolesForUser(string username)
{
var allRoles = new List<string>();
var root = new DirectoryEntry(WebConfigurationManager.ConnectionStrings[ConnectionStringName].ConnectionString,
ConnectionUsername,
ConnectionPassword);
var searcher = new DirectorySearcher(root,
string.Format(CultureInfo.InvariantCulture, "(&(objectClass=user)({0}={1}))",
AttributeMapUsername,
username));
searcher.PropertiesToLoad.Add("memberOf");
SearchResult result = searcher.FindOne();
if (result != null && !string.IsNullOrEmpty(result.Path))
{
DirectoryEntry user = result.GetDirectoryEntry();
PropertyValueCollection groups = user.Properties["memberOf"];
foreach (string path in groups)
{
string[] parts = path.Split(',');
if (parts.Length > 0)
{
foreach (string part in parts)
{
string[] p = part.Split('=');
if (p[0].Equals("cn", StringComparison.OrdinalIgnoreCase))
{
allRoles.Add(p[1]);
}
}
}
}
}
return allRoles.ToArray();
}
https://stackoverflow.com/questions/5252108
复制相似问题