質問

拡張したい 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), 、そしてユーザーなどについても同じことをします...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top