C# 扩展GroupPrincipal和Members属性
我想扩展C# 扩展GroupPrincipal和Members属性,c#,active-directory,directoryservices,account-management,C#,Active Directory,Directoryservices,Account Management,我想扩展GroupPrincipal类来处理一些自定义属性: using System.DirectoryServices.AccountManagement; [DirectoryRdnPrefix("CN")] [DirectoryObjectClass("group")] public class MyGroupPrincipal : GroupPrincipal { // ... } 我如何覆盖MyGroupPrincipal的Members属性,以便如果其成员是组,则返回M
GroupPrincipal
类来处理一些自定义属性:
using System.DirectoryServices.AccountManagement;
[DirectoryRdnPrefix("CN")]
[DirectoryObjectClass("group")]
public class MyGroupPrincipal : GroupPrincipal {
// ...
}
我如何覆盖MyGroupPrincipal
的Members
属性,以便如果其成员是组,则返回MyGroupPrincipal
而不是GroupPrincipal
的实例?我想写信
MyGroupPrincipal group = GetGroup();
foreach (var m in group.Members) {
if (m is MyGroupPrincipal) { // always fails: m is a normal GroupPrincipal
// do something
}
}
无法直接重写GroupPrincipal的Members属性。相反,您可以使用自己的方法(很抱歉没有清晰的代码,但我在代码中使用了下面描述的部分解决方案) 我发现AccountManagement库中有很多次,您只需使用基本的DirectoryEntry就可以正确完成任务。您可以使用
group.getunderyingobject()
访问基本对象,然后通过迭代deGroup.Properties(“成员”)
读取成员资格。读取每个成员类型(记不起属性名,可能是'member.SchemaClassName'?)和DiscrimitedName(member.Properties(“DiscrimitedName”)(0.ToString()
),然后基于类型创建一个switch语句,在该语句中使用可分辨名称MyGroupPrincipal.FindByIdentity创建每个主体(上下文、区分名称)
,并对用户执行相同操作,等等