Question

Je veux étendre la classe GroupPrincipal pour gérer des propriétés personnalisées:

using System.DirectoryServices.AccountManagement;

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

Comment pourrais-je remplacer la propriété Members pour MyGroupPrincipal de sorte que si elle a un membre qui est un groupe d'une instance de MyGroupPrincipal et non de GroupPrincipal est de retour? Je voudrais écrire par exemple.

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

La solution

Il n'y a pas moyen de passer outre directement la propriété de membres GroupPrincipal. Au lieu de cela, vous pouvez rouler votre propre méthode (désolé pour aucun code de coupe propre, mais je l'ai utilisé des portions du solutiont décrit ci-dessous à travers mon code).

Je l'ai constaté que de nombreuses fois avec la bibliothèque de AccountManagement que vous venez d'utiliser le DirectoryEntry de base pour faire avancer les choses à droite. Vous pouvez accéder à l'objet de base en utilisant group.GetUnderlyingObject(), puis lire les membres par itérer deGroup.Properties("member"). Lisez chaque type de membres (ne me souviens pas du nom de la propriété, peut-être « member.SchemaClassName »?) Et distinguishedName (member.Properties("distinguishedName")(0).ToString()) Ensuite, créez une instruction switch en fonction du type où vous créez chaque principale en utilisant le MyGroupPrincipal.FindByIdentity(context, distinguishedName) de nom distinctif, et faire la même chose pour utilisateurs, etc ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top