グラップリンシパルとメンバーのプロパティを拡張します
-
28-09-2019 - |
質問
拡張したい GroupPrincipal
いくつかのカスタムプロパティを処理するクラス:
using System.DirectoryServices.AccountManagement;
[DirectoryRdnPrefix("CN")]
[DirectoryObjectClass("group")]
public class MyGroupPrincipal : GroupPrincipal {
// ...
}
どうすればオーバーライドできますか Members
のプロパティ MyGroupPrincipal
そのため、グループであるメンバーがいる場合 MyGroupPrincipal
そして、ではありません GroupPrincipal
返されますか? EGを書きたいと思います
MyGroupPrincipal group = GetGroup();
foreach (var m in group.Members) {
if (m is MyGroupPrincipal) { // always fails: m is a normal GroupPrincipal
// do something
}
}
解決
Groupprincipalのメンバープロパティを直接オーバーライドする方法はありません。代わりに、独自の方法をロールすることができます(クリーンカットコードがない場合は申し訳ありませんが、コードを介して以下の説明の一部を使用しました)。
アカウント管理ライブラリを使用して、Base DirectoryEntryを使用して物事を正しく行う必要があることが何度もわかりました。使用してベースオブジェクトにアクセスできます group.GetUnderlyingObject()
, 、その後、反復してメンバーシップを読みます deGroup.Properties("member")
. 。各メンバータイプ(プロパティ名を覚えていない、たぶん 'member.schemaclassname'?)とdistinguedname()を読んでください()member.Properties("distinguishedName")(0).ToString()
)次に、著名な名前を使用して各プリンシパルを作成するタイプに基づいてスイッチステートメントを作成します MyGroupPrincipal.FindByIdentity(context, distinguishedName)
, 、そしてユーザーなどについても同じことをします...