La extensión de la propiedad y de los miembros GroupPrincipal
-
28-09-2019 - |
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
}
}
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 ...