2

Я хочу продлить GroupPrincipal класс для обработки некоторых пользовательских свойств:Расширения 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 
    } 
} 

ответ

1

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

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

Смежные вопросы