Estendendo a propriedade Groupprincipal e membros
-
28-09-2019 - |
Pergunta
Eu quero estender o GroupPrincipal
classe para lidar com algumas propriedades personalizadas:
using System.DirectoryServices.AccountManagement;
[DirectoryRdnPrefix("CN")]
[DirectoryObjectClass("group")]
public class MyGroupPrincipal : GroupPrincipal {
// ...
}
Como eu poderia substituir o Members
propriedade para MyGroupPrincipal
para que, se tiver um membro que seja um grupo, uma instância de MyGroupPrincipal
e não de GroupPrincipal
é devolvido? Eu gostaria de escrever por exemplo
MyGroupPrincipal group = GetGroup();
foreach (var m in group.Members) {
if (m is MyGroupPrincipal) { // always fails: m is a normal GroupPrincipal
// do something
}
}
Solução
Não há como substituir diretamente a propriedade dos membros do Groupprincipal. Em vez disso, você pode rolar seu próprio método (desculpe por nenhum código de corte limpo, mas usei partes da solução descrita abaixo através do meu código).
Descobri isso muitas vezes com a Biblioteca de Gerenciamento de Accorreva que você só precisa usar o Diretório Base para fazer as coisas corretamente. Você pode acessar o objeto base usando group.GetUnderlyingObject()
, então leia os membros da iteração deGroup.Properties("member")
. Leia cada tipo de membros (não consigo lembrar o nome da propriedade, talvez 'membro.schemaclassName'?) E DistinguishedName (member.Properties("distinguishedName")(0).ToString()
) Em seguida MyGroupPrincipal.FindByIdentity(context, distinguishedName)
, e faça o mesmo com os usuários, etc ...