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
    }
}
Foi útil?

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 ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top