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'?)とdistinguishedName(member.Properties("distinguishedName")(0).ToString())を読み取り、次に、識別名を使用して各プリンシパルを作成するタイプに基づいてswitchステートメントを作成しMyGroupPrincipal.FindByIdentity(context, distinguishedName)、ユーザーに対して同じことを行います。等...

于 2011-04-19T04:17:39.060 に答える