remarks example cref c# active-directory directoryservices account-management

example - remarks c#



ProlongaciĆ³n de la propiedad GroupPrincipal and Members (1)

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 anular la propiedad Members para MyGroupPrincipal para que si tiene un miembro que es un grupo, se MyGroupPrincipal una instancia de MyGroupPrincipal y no de GroupPrincipal ? 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 } }


No hay forma de anular directamente la propiedad Members de GroupPrincipal. En su lugar, puede implementar su propio método (lo siento por no tener un código de corte limpio, pero he utilizado partes de la solución descrita a continuación a través de mi código).

He encontrado que muchas veces con la biblioteca AccountManagement solo tienes que usar la base de entrada de directorio para hacer las cosas bien. Puede acceder al objeto base utilizando group.GetUnderlyingObject() , luego lea la membresía al iterar deGroup.Properties("member") . Lea cada tipo de miembro (no puede recordar el nombre de la propiedad, tal vez ''member.SchemaClassName''?) Y distinguishedName ( member.Properties("distinguishedName")(0).ToString() ) Luego, cree una instrucción switch basada en el tipo en el que crea cada principal usando el nombre distinguido MyGroupPrincipal.FindByIdentity(context, distinguishedName) , y haz lo mismo para los usuarios, etc.