.NET

2010-01-26 14 views
32

में सक्रिय निर्देशिका समूहों से उपयोगकर्ताओं को जोड़ना और निकालना मैं सी # में सक्रिय निर्देशिका से उपयोगकर्ताओं को जोड़ने और हटाने के लिए निम्न विधियां लिख रहा हूं।.NET

void AddUserToGroup(string userId, string groupName); 
void RemoveUserFromGroup(string userId, string groupName); 

इन तरीकों को कैसे कार्यान्वित करना सबसे अच्छा है?

कोडप्रोजेक्ट से कुछ कोड यहां दिया गया है। मैं नहीं देख सकता कि एडी सर्वर इन उदाहरणों में कहां निर्दिष्ट है? (क्या यह एलडीएपी प्रोटोकॉल का उपयोग करते समय .NET ढांचे द्वारा पूरी तरह से आपूर्ति की जाती है?)। क्या ये उदाहरण निम्नलिखित हैं?

public void AddToGroup(string userDn, string groupDn) 
{ 
    try 
    { 
     DirectoryEntry dirEntry = new DirectoryEntry("LDAP://" + groupDn); 
     dirEntry.Properties["member"].Add(userDn); 
     dirEntry.CommitChanges(); 
     dirEntry.Close(); 
    } 
    catch (System.DirectoryServices.DirectoryServicesCOMException E) 
    { 
     //doSomething with E.Message.ToString(); 

    } 
} 


public void RemoveUserFromGroup(string userDn, string groupDn) 
{ 
    try 
    { 
     DirectoryEntry dirEntry = new DirectoryEntry("LDAP://" + groupDn); 
     dirEntry.Properties["member"].Remove(userDn); 
     dirEntry.CommitChanges(); 
     dirEntry.Close(); 
    } 
    catch (System.DirectoryServices.DirectoryServicesCOMException E) 
    { 
     //doSomething with E.Message.ToString(); 

    } 
} 

उत्तर

61

ओह की जरूरत है। एलडीएपी। यदि आप .Net Framework 3.5 या ऊपर का उपयोग कर रहे हैं, तो मैं अत्यधिक सिस्टम का उपयोग करने की सलाह देता हूं। डायरेक्टरी सर्विसेज। खाता प्रबंधन नामस्थान। इससे चीजें बनाती हैं इसलिए बहुत आसान है।

public void AddUserToGroup(string userId, string groupName) 
{ 
    try 
    { 
     using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "COMPANY")) 
     { 
      GroupPrincipal group = GroupPrincipal.FindByIdentity(pc, groupName); 
      group.Members.Add(pc, IdentityType.UserPrincipalName, userId); 
      group.Save(); 
     } 
    } 
    catch (System.DirectoryServices.DirectoryServicesCOMException E) 
    { 
     //doSomething with E.Message.ToString(); 

    } 
} 

public void RemoveUserFromGroup(string userId, string groupName) 
{ 
    try 
    { 
     using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "COMPANY")) 
     { 
      GroupPrincipal group = GroupPrincipal.FindByIdentity(pc, groupName); 
      group.Members.Remove(pc, IdentityType.UserPrincipalName, userId); 
      group.Save(); 
     } 
    } 
    catch (System.DirectoryServices.DirectoryServicesCOMException E) 
    { 
     //doSomething with E.Message.ToString(); 

    } 
} 
+2

सिस्टम की आवश्यकता है। डायरेक्टर सर्विसेज। खाता प्रबंधन केवल = = 3.5 में उपलब्ध है, बल्कि 3.0 – regex

+2

से नीचे कोड मेरे लिए काम किया *** समूह। सदस्य। रिमूव (UserPrincipal.FindByIdentity (पीसी, उपयोगकर्ता आईडी)) *** *** के बजाय *** "group.Members.Remove (पीसी, IdentityType.UserPrincipalName, userId) ; "***। नोट: मेरा उपयोगकर्ता आईडी डोमेन नाम – Rama

+0

हाँ के साथ संलग्न किए बिना बस "USERNAME" है, यह अधिभार काम करता है, यह भी हटाए गए कॉल भेजने से पहले उपयोगकर्ता पहचान प्राप्त करने के लिए एलडीएपी सेवा में एक अतिरिक्त कॉल है। स्पष्ट रूप से, यह संभव है कि वे कार्य में समकक्ष हों क्योंकि एपीआई शायद हटाने के पहले उपयोगकर्ता नाम के आधार पर पहचान के लिए एलडीएपी में भी कॉल करता है। –

2

सर्वर GroupDN चर मूल्य का हिस्सा है।

LDAP: उदाहरण के लिए: //myServer/CN=MyGroup,CN=Groups,CN=MyContainer,DN=mydomain.com

पूरी बात समूह के लिए LDAP पथ है। पहला भाग (MyServer) सर्वर का नाम है।

सर्वर नाम के बाद भाग (उदा। सीएन = ...) समूह का डीएन (विशिष्ट नाम) है।

+0

एकमात्र चीज जो मैं कहूंगा वह यह है कि एक अच्छा एडी सेटअप में, आपको सर्वर निर्दिष्ट नहीं करना चाहिए। .NET AD/निम्न स्तर एडी कॉल आपके लिए निकटतम उपलब्ध सर्वर को हल करना चाहिए। लेकिन यह अधिक एडी/डोमेन सेटअप है और इतना कोड नहीं है। यदि आपका एडी सेटअप ठोस है, तो आप सर्वर को बाहर करने में सक्षम होना चाहिए (उदा। एलडीएपी: //CN=MyGroup,CN=Groups ,CN=MyContainer ,DN=mydomain.com) –

+1

क्षमा करें वास्तव में आपके प्रश्नों का उत्तर नहीं दिया। हाँ, उदाहरण साफ दिखते हैं। यदि आप अभी भी अनिश्चित हैं, तो मैं अत्यधिक .NET डेवलपर की मार्गदर्शिका निर्देशिका निर्देशिका प्रोग्रामिंग (http://www.amazon.com/gp/product/0321350170) –

1

आप एलडीएपी सर्वर को निर्देशिका तर्क में पथ तर्क में डाल सकते हैं, इसलिए "एलडीएपी: //" + ldapServer + ldapQuery।

उपयोग DirectoryEntry (स्ट्रिंग पथ, स्ट्रिंग userId, स्ट्रिंग पासवर्ड) यदि आप प्रमाणित करने के लिए

2

जब public void RemoveUserFromGroup(string userDn, string groupDn)

dirEntry.Properties["member"].Remove(userDn) में एक सदस्य को हटाने मेरे लिए काम नहीं करता।

dirEntry.Properties["member"].RemoveAt(dn.IndexOf(dn)) काम करता है।

+0

'डीएन' चर क्या है? – fripp13

+0

@ fripp13, एक सक्रिय निर्देशिका के संदर्भ में, डीएन लगभग हमेशा विशिष्ट नाम का मतलब है। –