2

我想扩展GroupPrincipal类来处理一些自定义属性:

using System.DirectoryServices.AccountManagement;

[DirectoryRdnPrefix("CN")]
[DirectoryObjectClass("group")]
public class MyGroupPrincipal : GroupPrincipal {
    // ...
}

我怎样才能覆盖该Members属性,MyGroupPrincipal以便如果它有一个成员是一个组的一个实例MyGroupPrincipal而不是GroupPrincipal返回?我想写例如

MyGroupPrincipal group = GetGroup();
foreach (var m in group.Members) {
    if (m is MyGroupPrincipal) { // always fails: m is a normal GroupPrincipal 
        // do something
    }
}
4

1 回答 1

1

无法直接覆盖 GroupPrincipal 的 Members 属性。相反,您可以推出自己的方法(抱歉没有干净的代码,但我在代码中使用了下面描述的部分解决方案)。

我发现很多次使用 AccountManagement 库,您只需要使用基本的 DirectoryEntry 就可以正确完成工作。您可以使用 访问基础对象group.GetUnderlyingObject(),然后通过迭代读取成员资格deGroup.Properties("member")。读取每个成员类型(不记得属性名称,可能是“member.SchemaClassName”?)和 distinctName( member.Properties("distinguishedName")(0).ToString()) 然后根据类型创建一个 switch 语句,在其中使用专有名称创建每个主体MyGroupPrincipal.FindByIdentity(context, distinguishedName),并对用户执行相同操作, ETC...

于 2011-04-19T04:17:39.060 回答