Sök…


Anmärkningar

Det här avsnittet ger en översikt över vad ldap är och varför en utvecklare kanske vill använda den.

Det bör också nämna alla stora ämnen inom ldap och länka till relaterade ämnen. Eftersom dokumentationen för ldap är ny kan du behöva skapa initialversioner av relaterade ämnen.

Ställa in PHP för att fungera med LDAP

När du har konfigurerat din LDAP-server korrekt, vill vi nu ansluta. Till exempel genom att använda PHP.

  • DN = utmärkt namn. Det betyder i vilken del av databasen du arbetar. Kan vara en användare eller en grupp (eller till och med konfigurationsinställningar).
  • Entry: en enhet, till exempel en användare.
  • Attribut: något inuti en post, till exempel namn, telefonnummer och e-postadress.

Ansluter

Först definierar vi följande:

$server = "server.example.com";  //this is the LDAP server you're connecting with
$ds = ldap_connect("ldaps://$server", 636); //always connect securely via LDAPS when possible

Nu är vi anslutna. Nästa sak vi vill ha är att låta servern veta att vi är en pålitlig person. Den enklaste lösningen är att använda roten DN ELLER en befintlig användare med rätt behörighet för att visa databasen (förmodligen kan alla användare i databasen göra det som standard). Vi verifierar med bindfunktionen.

Ställ in alternativ

Först förklarar vi dessa alternativ. Beroende på din serverkonfiguration kan du lämna det här.

ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);

Bindning

Antag att du använder admin och lösenordet är pass123notsafe

$dn = "uid=admin,cn=users,dc=server,dc=example,dc=com";
$pass = "pass123notsafe";
$ldapbind = ldap_bind($ds, $dn, $pass); //this is the point we are authenticating

Det är väldigt snällt. Vi är i. Nu kan vi utföra många olika operationer. Vi kan till exempel söka, läsa, skriva och ändra användare och till och med grupper.

Sökande

Föreställ dig att vi vill visa alla medlemmar i gruppen "användare".

$dn = "cn=users,dc=server,dc=example,dc=com"; //very important: in which part of your database are you looking
$filter = "uid=*"; //don't filter anyone out (every user has a uid)
$sr = ldap_search($ds, $dn, $filter) or die ("bummer"); //define your search scope

$results = ldap_get_entries($ds, $sr); //here we are pulling the actual entries from the search we just defined
var_dump($results); //will give you all results is array form. 

Du kan använda förhandsslingor för att visa data på ett trevligt sätt.

Okej, har du det här? Fortsätt nu med lite filtrering. Vi vill bara visa användare i gruppen "cykelägare" som har registrerat en e-postadress. Det är viktigt att veta att alla användare är i cn = användare. Utöver detta kan de också vara medlemmar i andra grupper.

//did the connecting and binding

$dn = "cn=bikeowners,cn=groups,dc=server,dc=example,dc=com"; //note the extra "cn=groups" for looking in a group that is not "users"
$filter = "email=*"; //email address must be set but can be anything
$sr = ldap_search($ds, $dn, $filter) or die ("bummer"); //define your search scope

Och fortsätt nu med ldap_get_entries igen.

Effektivitet i att få poster

Ett exempel där effektivitet tas upp, allt viktigare med stora databaser med många attribut per post. Speciellt när du lagrar bilder i attributet jpegfoto kan det minska din laddningstid betydligt när du selektivt drar dina poster.

Föreställ dig att vi vill leta efter användare som ingår i gruppen "cykelägare". Det finns mycket information lagrad i dessa poster, låt oss säga att de har följande attribut: cn, uid, namn, displayname, post, initialer, mobil, telefonnummer, gata, postadress, postnummer och jpegfoto. Nu behöver vi bara deras uid, namn och initialer.

För detta använder vi en fjärde parameter för ldap_search (tillval):

$dn = "cn=bikeowners,cn=groups,dc=server,dc=example,dc=com";
$filter = "uid=*"; //
$justhese = array("uid", "name", "initials");
$sr = ldap_search($ds, $dn, $filter, $justthese) or die ("bummer"); //define your search scope

Och voila, köra ldap_get_entries ger dig bara dessa data.

Avancerad filtrering

Naturligtvis kan du dra en hel databas med LDAP och bearbeta detta vidare i PHP. Men precis som med MySQL är det mycket effektivare att utföra behandlingsservern. För att demonstrera detta kan vi använda ett avancerat filter.

Ta ett av exemplen ovan som utgångspunkt, men ändra $ -filter enligt raden nedan. I vårt exempel vill vi visa data från användare som är aktiva. Normalt används attributet shadowexpire för att lagra denna information. Detta kan dock skilja sig mellan olika LDAP-system. Vi vill inte bara visa de användare som är aktiva utan också deras namn måste börja med ett "a" och de måste bo i Amsterdam.

I grund och botten vill vi göra tre saker:

  1. Lättast: måste bo i Amsterdam. I det här exemplet lagras bostaden i attributet "postalddress"
$filter= "postaladdress=Amsterdam";
  1. Namnet måste börja med ett "a". I det här exemplet består UID från namnet, så:
$filter= "uid=a*";
  1. Användaren måste vara aktiv. Detta värde lagras i standardattributet shadowexpire med värdet -1 . Beroende på din shadowexpire kan shadowexpire innehålla en mängd värden, även datum är möjliga. Om en användare är inaktiv, kommer shadowexpire att bli 1 . För att vara säker på att vi får alla användare utom för de som verkligen är inaktiva väljer vi inte att filtrera på shadowexpire = -1 . Istället säger vi att vi inte vill att de ska vara inaktiva.
$filter= "(!(shadowexpire=1))"; //NOT is represented with "!"

Nu den mest intressanta delen: kombinera alla tre exemplen. Vi kan göra detta med parenteser, OCH, ELLER och INTE uttryck

$filter= "(&(postaladdress=Amsterdam)(uid=a*)(!(shadowexpire=1)))";

Slutligen kan vi bygga in ett OR-uttalande med "|", till exempel om vi vill att alla användare börjar med "a" eller "b"

$filter= "(|(uid=a*)(uid=n*))";

Du kan kombinera oändligt och bygga ganska imponerande filter, gilla att prova!



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow