Domanda

Voglio estendere la classe GroupPrincipal per gestire alcune proprietà personalizzate:

using System.DirectoryServices.AccountManagement;

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

Come potevo ignorare la proprietà Members per MyGroupPrincipal in modo che se ha un membro che è un gruppo un'istanza di MyGroupPrincipal e non di GroupPrincipal è tornato? Vorrei scrivere per es.

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

Soluzione

Non v'è alcun modo per ignorare direttamente la struttura Membri di GroupPrincipal. Invece si può rotolare il proprio metodo (spiacente per nessun codice taglio pulito, ma ho usato porzioni del solutiont sotto descritto attraverso il mio codice).

Ho scoperto che molte volte con la libreria AccountManagement che basta utilizzare il DirectoryEntry base per ottenere le cose fatte bene. È possibile accedere all'oggetto base utilizzando group.GetUnderlyingObject(), quindi leggere l'appartenenza mediante iterazione deGroup.Properties("member"). Leggere ogni tipo di membri (di cui non ricordo il nome della proprietà, forse 'member.SchemaClassName'?) E distinguishedName (member.Properties("distinguishedName")(0).ToString()) Quindi creare un'istruzione switch in base al tipo in cui si crea ogni principale utilizzando il nome MyGroupPrincipal.FindByIdentity(context, distinguishedName) distinto, e fare lo stesso per utenti, ecc ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top