c# - विस्तार ग्रुप पीमिनियल और सदस्यों की संपत्ति



active-directory directoryservices (1)

मैं कुछ कस्टम गुणों को प्रबंधित करने के लिए GroupPrincipal वर्ग का विस्तार करना चाहता हूं:

using System.DirectoryServices.AccountManagement;

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

मैं MyGroupPrincipal लिए Members संपत्ति को ओवरराइड कैसे कर सकता हूं ताकि यदि कोई सदस्य हो, जो एक समूह है जो MyGroupPrincipal का एक समूह है और ग्रुप MyGroupPrincipal का नहीं है? मैं उदाहरण लिखना चाहूंगा

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() ऑब्जेक्ट group.GetUnderlyingObject() , फिर deGroup.Properties("member") को पुनरावृति करके सदस्यता पढ़ें। प्रत्येक सदस्य प्रकार पढ़ें (संपत्ति नाम याद नहीं कर सकते, शायद 'member.SchemaClassName'?) और प्रतिष्ठित नाम ( member.Properties("distinguishedName")(0).ToString() ) तब टाइप के आधार पर एक स्विच स्टेटमेंट बनाएं जहां आप विशिष्ट नाम MyGroupPrincipal.FindByIdentity(context, distinguishedName) प्रतिष्ठित नाम) का उपयोग करके प्रत्येक प्रधानाचार्य बनाएं, और उपयोगकर्ताओं, आदि के लिए ऐसा ही करें ...





account-management