سؤال

اريد تمديد 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. بدلاً من ذلك ، يمكنك لف طريقتك الخاصة (آسف لعدم وجود رمز قطع نظيف ، لكنني استخدمت أجزاء من الحل الموصوف أدناه من خلال الكود الخاص بي).

لقد وجدت أنه في كثير من الأحيان مع مكتبة إدارة الحساب أنه عليك فقط استخدام الدليل الأساسي لإنجاز الأمور بشكل صحيح. يمكنك الوصول إلى الكائن الأساسي باستخدام group.GetUnderlyingObject(), ثم اقرأ العضوية عن طريق التكرار deGroup.Properties("member"). اقرأ كل أعضاء نوع (لا يمكن تذكر اسم العقار ، وربما "العضو.member.Properties("distinguishedName")(0).ToString()) ثم قم بإنشاء عبارة تبديل استنادًا إلى النوع الذي تقوم فيه بإنشاء كل مدير باستخدام الاسم المتميز MyGroupPrincipal.FindByIdentity(context, distinguishedName), ، وافعل الشيء نفسه للمستخدمين ، إلخ ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top