2012-11-21 27 views
7

मैं कैसे जांच सकता हूं कि उपयोगकर्ता php_ldap मॉड्यूल का उपयोग कर समूह का हिस्सा है या नहीं?PHP एलडीएपी: उपयोगकर्ता समूह में है या नहीं, तो कैसे खोज करें?

$ds=ldap_connect($ldapHost, $ldapPort); 
if ($ds) { 
    $r=ldap_bind($ds, $ldapRdn, $ldapPassword); 
    $filter = "(sAMAccountName=" . $uid . ")"; 
    $attr = array("memberof"); 
    $result = ldap_search($ds, $ldapDN, $filter, $attr) or exit("Unable to search LDAP server"); 

मुझे यकीन है कि नहीं कर रहा हूँ अगर यह है:

मैं LDAP और इसलिए थोड़ा उलझन में ...

googling मैं इस के साथ आ गए हैं अब तक के साथ पूरी तरह से नया कर रहा हूँ सही है क्योंकि इसे एडी के लिए विशिष्ट रूप से बनाया गया था। समस्या $ ldapDN प्रतीत होती है। यह वही है जो मैं सही खोजता हूं? मेरे समूह "परिभाषा" है:

cn=User,ou=Profiles,ou=App_DEV,ou=ApplicationRights,O=MyCompany.COM 

मैं यह जांच कैसे कर सकता हूं?

संपादित करें:।।

यहाँ मेरी समाधान के "स्वीकृत उत्तर" और परीक्षण & त्रुटि "मुझे लगता है कि इस सवाल का जवाब अपने विशिष्ट सिस्टम पर बहुत निर्भर करता है मदद से पाया जाता है

//This is the User group DN 
$ldapDN = "cn=User,ou=Profiles,ou=App_DEV,ou=ApplicationRights,O=MyCompany.COM"; 
$filter = "(uniqueMember=uid=" . $uid . ",ou=Users,O=MYCOMPANY.COM)"; 
$attr = array('uniqueMember'); 
$result = ldap_search($ldapConnection, $ldapDN, $filter, $attr): 
$entries = ldap_get_entries($ldapConnection, $result); 
ldap_unbind($ldapConnection); 
return intval($entries["count"]) > 0; 

उत्तर

6

सदस्यता जानकारी आमतौर पर है समूह में संग्रहीत - 'सदस्य' या 'सदस्य यूआईडी' विशेषता के रूप में। 'सदस्य' सदस्य ऑब्जेक्ट के पूर्ण डीएन (विशिष्ट नाम) का प्रतिनिधित्व करता है, और 'uid = username, ou = users, dc जैसे कुछ दिखाई देगा = उदाहरण, डीसी = कॉम '। सदस्य यूआईडी के मामले में, मूल्य केवल' उपयोगकर्ता नाम 'होगा।

आपकी निर्देशिका में उपयोग किए जाने वाले तरीके को समझने का तरीका Apache Directory Studio जैसे किसी समूह का विश्लेषण करना है।

'सदस्य' विशेषता के अलावा, एडी उपयोगकर्ता के रिकॉर्ड में सदस्य का संग्रह करता है जिसमें समूह का डीएन होता है। लेकिन अधिकांश निर्देशिकाएं ऐसा नहीं करती हैं, शायद यही कारण है कि आपका कोड काम नहीं कर रहा है।

क्या आप के लिए देख रहे हैं इस प्रकार का फ़िल्टर:

// & means "And" the next sibling items: 
// so "find items that have the objectClass of group and a member whose DN is user_dn 
(&(objectClass=group)(member=[user_dn])) 

या

(&(objectClass=group)(memberUid=[user_uid])) 
अपने मामले में

तो

$result = ldap_search(
    $ds, 
    'dc=mycompany,dc=com', // The base from which to start your search. (could be an OU too, like 'ou=restricted,dc=mycompany,dc=com') 
    '(&(objectClass=group)(member=uid=tom,ou=users,dc=mycompany,dc=com))' 
); 

या अपने समूहों यदि memberUid से जाना, आप फ़िल्टर को

पर बदल देंगे

$ परिणाम में समूह अभिलेखों की एक सूची होनी चाहिए जिसमें सदस्य के रूप में 'उपयोगकर्ता नाम' हो।