使用 Active Directory 获取角色列表
Get list of Roles, domain wise with Active Directory
我试图在 C# 中列出来自 Active Directory 的角色列表,但到目前为止我找到的唯一答案是绑定到特定用户的角色列表,而不是所有域明智的角色列表。
这是我找到的片段here
// set up domain context
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
{
// find a user
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SomeUserName");
if(user != null)
{
// get the authorization groups - those are the "roles"
var groups = user.GetAuthorizationGroups();
foreach(Principal principal in groups)
{
// do something with the group (or role) in question
}
}
}
如您所见,获取角色列表的唯一方法是使用绑定到用户的 UserPrincipal
对象。我想列出可以分配给来自特定域的用户的所有可能角色。
顺便说一下,我不太了解 Active Directory 中的 User/Group/Role 层次结构,所以在考虑该结构如何工作时我可能是错的,比方说,也许角色只是一个特殊的一种团体。
您可以使用 PrincipalSearcher
和 "query-by-example" 主体进行搜索:
// create your domain context
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
{
// define a "query-by-example" principal - here, we search for a GroupPrincipal
GroupPrincipal qbeGroup = new GroupPrincipal(ctx);
// create your principal searcher passing in the QBE principal
PrincipalSearcher srch = new PrincipalSearcher(qbeGroup);
// find all matches
foreach(var found in srch.FindAll())
{
// do whatever here - "found" is of type "Principal" - it could be user, group, computer....
}
}
此搜索从当前连接的域的 top-level 开始,并枚举该域中的所有组。现在这些既可以是安全组,也可以是分发列表组 - 如果你想获得 安全组 (实际上对应于 "roles"),你可以像这样调整你的搜索器这个:
GroupPrincipal qbeGroup = new GroupPrincipal(ctx);
qbeGroup.IsSecurityGroup = true;
有关详细信息,请参阅 MSDN documentation on the System.DirectoryServices.AccountManagement 命名空间。
我试图在 C# 中列出来自 Active Directory 的角色列表,但到目前为止我找到的唯一答案是绑定到特定用户的角色列表,而不是所有域明智的角色列表。
这是我找到的片段here
// set up domain context
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
{
// find a user
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SomeUserName");
if(user != null)
{
// get the authorization groups - those are the "roles"
var groups = user.GetAuthorizationGroups();
foreach(Principal principal in groups)
{
// do something with the group (or role) in question
}
}
}
如您所见,获取角色列表的唯一方法是使用绑定到用户的 UserPrincipal
对象。我想列出可以分配给来自特定域的用户的所有可能角色。
顺便说一下,我不太了解 Active Directory 中的 User/Group/Role 层次结构,所以在考虑该结构如何工作时我可能是错的,比方说,也许角色只是一个特殊的一种团体。
您可以使用 PrincipalSearcher
和 "query-by-example" 主体进行搜索:
// create your domain context
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
{
// define a "query-by-example" principal - here, we search for a GroupPrincipal
GroupPrincipal qbeGroup = new GroupPrincipal(ctx);
// create your principal searcher passing in the QBE principal
PrincipalSearcher srch = new PrincipalSearcher(qbeGroup);
// find all matches
foreach(var found in srch.FindAll())
{
// do whatever here - "found" is of type "Principal" - it could be user, group, computer....
}
}
此搜索从当前连接的域的 top-level 开始,并枚举该域中的所有组。现在这些既可以是安全组,也可以是分发列表组 - 如果你想获得 安全组 (实际上对应于 "roles"),你可以像这样调整你的搜索器这个:
GroupPrincipal qbeGroup = new GroupPrincipal(ctx);
qbeGroup.IsSecurityGroup = true;
有关详细信息,请参阅 MSDN documentation on the System.DirectoryServices.AccountManagement 命名空间。