Frage

Ich möchte die GroupPrincipal Klasse erweitern einige benutzerdefinierte Eigenschaften zu behandeln:

using System.DirectoryServices.AccountManagement;

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

Wie kann ich die Members Eigenschaft für MyGroupPrincipal außer Kraft setzen, so dass, wenn es ein Mitglied hat, dass eine Gruppe eine Instanz von MyGroupPrincipal und nicht die von GroupPrincipal zurückgegeben wird? Ich mag beispiel schreiben zu können.

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

Lösung

Es gibt keine Möglichkeit, direkt die Mitglieder Eigenschaft Groupprincipal außer Kraft zu setzen. Stattdessen können Sie Ihre eigene Methode rollen (sorry für keinen sauberen Schnitt Code, aber ich habe verwendet, um Teile der nachstehend beschriebenen solutiont durch aus meinem Code).

Ich habe festgestellt, dass viele Male mit der Account Bibliothek, dass Sie nur die Basis Directory verwenden, um die Dinge richtig zu erledigen. Sie können das Basisobjekt zugreifen group.GetUnderlyingObject() durch Sie dann die Mitgliedschaft lesen von deGroup.Properties("member") iterieren. Lesen Sie die einzelnen Mitglieder Typ (kann den Eigenschaftsnamen nicht erinnern, vielleicht ‚member.SchemaClassName‘?) Und distinguishedName (member.Properties("distinguishedName")(0).ToString()) Erstellen Sie dann eine switch-Anweisung basierend auf Typ, bei dem Sie jede Haupt mit dem eindeutigen Namen MyGroupPrincipal.FindByIdentity(context, distinguishedName) erstellen, und das gleiche für Benutzer, etc ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top