Szukaj…


Uwagi

W tej sekcji omówiono, czym jest ldap i dlaczego deweloper może chcieć z niego korzystać.

Powinien również wymieniać wszelkie duże tematy w ramach programu ldap i zawierać linki do powiązanych tematów. Ponieważ Dokumentacja dla ldap jest nowa, może być konieczne utworzenie początkowych wersji tych pokrewnych tematów.

Konfigurowanie PHP do pracy z LDAP

Po poprawnym skonfigurowaniu serwera LDAP chcemy teraz się połączyć. Na przykład za pomocą PHP.

  • DN = nazwa wyróżniająca. Oznacza to, w której części bazy danych pracujesz. Może być użytkownikiem lub grupą (lub nawet ustawieniami konfiguracji).
  • Wpis: jednostka, na przykład użytkownik.
  • Atrybut: coś wewnątrz wpisu, na przykład imię, numer telefonu i adres e-mail.

Złączony

Najpierw definiujemy następujące elementy:

$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

Teraz jesteśmy połączeni. Następną rzeczą, jakiej chcemy, jest powiadomienie serwera, że jesteśmy osobą godną zaufania. Najłatwiejszym rozwiązaniem jest użycie głównej nazwy wyróżniającej LUB istniejącego użytkownika z odpowiednimi uprawnieniami do przeglądania bazy danych (prawdopodobnie każdy użytkownik w bazie danych może to zrobić domyślnie). Uwierzytelniamy się za pomocą funkcji wiązania.

Ustaw opcje

Po pierwsze, deklarujemy te opcje. W zależności od konfiguracji serwera możesz to pominąć.

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

Wiążący

Załóżmy, że używasz administratora, a hasło to 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

To bardzo miłe. Jesteśmy w środku. Teraz możemy wykonać wiele różnych operacji. Na przykład możemy wyszukiwać, czytać, pisać i modyfikować użytkowników, a nawet grupy.

Badawczy

Wyobraź sobie, że chcemy wyświetlić wszystkich członków grupy „użytkowników”.

$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. 

Możesz użyć pętli foreach, aby ładnie wyświetlić dane.

OK, rozumiesz? Teraz przejdź do filtrowania. Chcemy wyświetlać tylko użytkowników w grupie „właściciele rowerów”, którzy zarejestrowali adres e-mail. Ważne jest, aby wiedzieć, że wszyscy użytkownicy korzystają z cn = users. Oprócz tego mogą być również członkami innych grup.

//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

A teraz ponownie przejdź do ldap_get_entries .

Efektywność w uzyskiwaniu zgłoszeń

Przykład rozwiązania problemu wydajności, który ma coraz większe znaczenie w przypadku dużych baz danych z dużą liczbą atrybutów na pozycję. Zwłaszcza, gdy przechowujesz zdjęcia w atrybucie jpegphoto, może to znacznie skrócić czas ładowania po selektywnym wyciągnięciu wpisów.

Wyobraź sobie, że chcemy szukać użytkowników należących do grupy „właściciele rowerów”. Wewnątrz tych wpisów jest wiele informacji, powiedzmy, że mają one następujące atrybuty: cn, uid, nazwa, nazwa wyświetlana, poczta, inicjały, telefon komórkowy, numer telefonu, ulica, adres pocztowy, kod pocztowy i jpegphoto. Teraz potrzebujemy tylko ich identyfikatora użytkownika, imienia i inicjałów.

W tym celu używamy opcjonalnego czwartego parametru ldap_search:

$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

I voila, uruchomienie ldap_get_entries da ci tylko te dane.

Zaawansowane filtrowanie

Oczywiście możesz pobrać całą bazę danych za pomocą LDAP i przetworzyć ją dalej w PHP. Jednak podobnie jak w przypadku MySQL przetwarzanie danych po stronie serwera jest znacznie wydajniejsze. Aby to zademonstrować, możemy użyć filtra zaawansowanego.

Weź jeden z powyższych przykładów jako punkt wyjścia, ale zmień filtr $ zgodnie z linią poniżej. W naszym przykładzie chcemy wyświetlić dane aktywnych użytkowników. Zwykle atrybut shadowexpire służy do przechowywania tych informacji. Może się to jednak różnić w zależności od systemu LDAP. Nie tylko chcemy wyświetlać aktywnych użytkowników, ale także ich nazwa musi zaczynać się od „a” i muszą mieszkać w Amsterdamie.

Zasadniczo chcemy zrobić trzy rzeczy:

  1. Najłatwiej: musisz mieszkać w Amsterdamie. W tym przykładzie miejsce zamieszkania jest zapisane w atrybucie „adres pocztowy”
$filter= "postaladdress=Amsterdam";
  1. Nazwa musi zaczynać się od „a”. W tym przykładzie UID składa się z nazwy, więc:
$filter= "uid=a*";
  1. Użytkownik musi być aktywny. Ta wartość jest przechowywana w domyślnym atrybucie shadowexpire o wartości -1 . W zależności od konfiguracji serwera shadowexpire może przechowywać niezliczone wartości, nawet daty są możliwe. Jeśli użytkownik jest nieaktywny, shadowexpire będzie shadowexpire 1 . Aby mieć pewność, że otrzymamy wszystkich użytkowników oprócz tych, którzy są naprawdę nieaktywni, nie wybieramy filtrowania według shadowexpire = -1 . Zamiast tego mówimy, że nie chcemy, aby były nieaktywne.
$filter= "(!(shadowexpire=1))"; //NOT is represented with "!"

Teraz najciekawsza część: połącz wszystkie trzy przykłady. Możemy to zrobić za pomocą nawiasów, wyrażeń AND, OR i NOT

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

Wreszcie możemy wbudować instrukcję OR, używając „|”, na przykład, jeśli chcemy, aby wszyscy użytkownicy zaczynali od „a” lub „b”

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

Możesz łączyć w nieskończoność i budować imponujące filtry, spróbuj!



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow