c# - список - Расширение свойства GroupPrincipal и Members



principalcontext (1)

Невозможно напрямую переопределить свойство Members GroupPrincipal. Вместо этого вы можете использовать свой собственный метод (извините за отсутствие кода очистки, но я использовал часть описанного ниже решения через мой код).

Я обнаружил, что много раз с библиотекой AccountManagement, которую вы просто должны использовать base DirectoryEntry, чтобы все было сделано правильно. Вы можете получить доступ к базовому объекту с помощью group.GetUnderlyingObject() , затем прочитать членство, итерации deGroup.Properties("member") . Прочитайте каждый тип участников (не помните имя свойства, возможно, «member.SchemaClassName»?) И member.Properties("distinguishedName")(0).ToString() ( member.Properties("distinguishedName")(0).ToString() ) Затем создайте оператор switch на основе типа, в котором вы создайте каждого принципала, используя различающееся имя MyGroupPrincipal.FindByIdentity(context, distinguishedName) , и сделайте то же самое для пользователей и т. д. ...

Я хочу расширить класс GroupPrincipal для обработки некоторых настраиваемых свойств:

using System.DirectoryServices.AccountManagement;

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

Как я могу переопределить свойство Members для MyGroupPrincipal чтобы, если у него есть член, который является группой, MyGroupPrincipal экземпляр MyGroupPrincipal а не GroupPrincipal ? Я бы хотел написать например

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




account-management