Pregunta

Quiero extender la clase GroupPrincipal para manejar algunas propiedades personalizadas:

using System.DirectoryServices.AccountManagement;

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

¿Cómo podría reemplazar la propiedad Members para MyGroupPrincipal de manera que si tiene un miembro que es un grupo de una instancia de MyGroupPrincipal no de GroupPrincipal se devuelve? Me gustaría escribir por ejemplo.

MyGroupPrincipal group = GetGroup();
foreach (var m in group.Members) {
    if (m is MyGroupPrincipal) { // always fails: m is a normal GroupPrincipal 
        // do something
    }
}
¿Fue útil?

Solución

No hay manera de reemplazar la propiedad de los miembros GroupPrincipal directamente. En su lugar puede rodar su propio método (lo siento por ningún código de corte limpio, pero yo he usado porciones de la solutiont continuación se describe a través de mi código).

he encontrado que muchas veces con la biblioteca De Cuenta que sólo tienen que usar el DirectoryEntry de base para hacer las cosas bien. Se puede acceder al objeto de base mediante el uso de group.GetUnderlyingObject(), a continuación, leer el número de miembros por iteración deGroup.Properties("member"). Lea cada tipo de miembros (no recuerdo el nombre de la propiedad, tal vez 'member.SchemaClassName'?) Y distinguishedName (member.Properties("distinguishedName")(0).ToString()) A continuación, cree una sentencia switch en función del tipo donde se crea cada principal utilizando el nombre distinguido MyGroupPrincipal.FindByIdentity(context, distinguishedName), y hacer lo mismo para usuarios, etc ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top