Вопрос

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

using System.DirectoryServices.AccountManagement;

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

Как я могу переопределить Members недвижимость 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
    }
}
Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top