C# Active Directory/LDAP名称空间的等价物?

C# Active Directory/LDAP名称空间的等价物?,c#,namespaces,active-directory,ldap,C#,Namespaces,Active Directory,Ldap,在代码中,我的“员工”的角色是类别。角色格式,其中类别是一种角色类型。例如,Foo.Bar和Foo.Foobar——都是Foo角色。在我的项目中,Foo实际上不是一个名称空间,但我是这样想的 在Active Directory中是否有一些容器或层次结构角色/组等同物,我可以分配和/或读取LDAP查询,以便我可以查询具有任何Foo角色或特定Foo.X角色的所有人?在Active Directory中,您可以将组分配为另一个组的成员。所以,如果我理解正确,您需要创建一个名为“Foo”的广告组,然后创

在代码中,我的“员工”的角色是
类别。角色
格式,其中
类别
是一种角色类型。例如,
Foo.Bar
Foo.Foobar
——都是
Foo
角色。在我的项目中,Foo实际上不是一个名称空间,但我是这样想的


在Active Directory中是否有一些容器或层次结构角色/组等同物,我可以分配和/或读取LDAP查询,以便我可以查询具有任何
Foo
角色或特定
Foo.X
角色的所有人?

在Active Directory中,您可以将组分配为另一个组的成员。所以,如果我理解正确,您需要创建一个名为“Foo”的广告组,然后创建两个名为“Foo.Bar”和“Foo.Foobar”的子组。将这两个子组指定为组“Foo”的成员

然后,对于被分配到组“Foo.Bar”的用户。他将同时扮演“Foo”和“Foo.Bar”两个角色。这意味着如果获得该用户的WindowsPrincipal,则WindowsPrincipal.IsInRole(“Foo”)和WindowsPrincipal.IsInRole(“Foo.Bar”)都返回true


如果您不是使用IsInRole()函数来检查成员身份,而是使用纯LDAP查询,恐怕我们找不到一种简单的方法来计算嵌套组关系。如果您真的想研究进行单个LDAP查询调用的方法,请尝试在AD用户对象上查找“tokenGroups”属性。它是由AD动态计算的计算属性。它包含所有嵌套的组信息。唯一的问题是它正在存储SID。因此,您需要找出广告组的SID,将其转换为LDAP二进制格式并执行查询。

您是在谈论azman角色吗?或者您正在谈论使用广告组作为角色?您是否可以创建广告组父级,然后将广告组Child1和Child2添加到组父级。然后,添加到Child1的用户自动具有角色Parent和Child1。如果您使用的是IsInRole(),它应该会自动工作。