Расширение GroupPrincipal и членов недвижимости
-
28-09-2019 - |
Вопрос
Я хочу продлить 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)
, И сделайте то же самое для пользователей и т. Д. ...