Uwierzytelnianie i autoryzacja w Zend Framework

by Mateusz Tymek — on Zend Framework, PHP

Head's up! This post was written back in 2009 and is very likely to contain outdated information.

Zend Framework jest bardzo elastycznym narzędziem, dlatego nie narzuca konkretnej metody zarządzania użytkownikami. W zamian oferuje dwa komponenty - Zend_Auth i Zend_Acl - które musimy jakoś połączyć z naszą aplikacją. Może to sprawiać problemy początkującym, gdyż dokumentacja rzuca ich od razu na głęboką wodę, a w internecie nie można znaleźć zbyt wielu przykładów. Sam potrzebowałem sporo czasu aby zrozumieć i opanować te zagadnienia.

Uwierzytelnianie - Zend_Auth

Do uwierzytelniania dochodzi gdy użytkownik podaje login i hasło aby zalogować się w witrynie. Zend_Auth sprawdza czy podane wartości pasują do siebie. Ta informacja zostaje zapisywana w sesji, zatem w każdej chwili możemy sprawdzić czy użytkownik jest zalogowany.
Zend_Auth udostępnia różne sposoby uwierzytelniania: na podstawie informacji z bazy danych, z katalogu LDAP, poprzez OpenID. Warstwą pomiędzy Zend_Auth a usługą przechowującą loginy i hasła są adaptery - klasy implementujące interfejs Zend_Auth_Adapter_Interface.

Autoryzacja - Zend_Acl

Autoryzacja to sprawdzenie czy użytkownik ma prawo dostępu do określonych danych. W tym kontekście będziemy posługiwać się dwoma pojęciami: rola (Zend_Acl_Role) i zasób (Zend_Acl_Resource). To programista ma zdecydować czym będą role i zasoby. Typowo rola będzie odpowiadać użytkownikowi witryny. Zasobem może być na przykład kontroler.
Dodajmy do tego "działania", także definiowane przez użytkownika. Działaniami mogą być na przykład "odczyt" i "zapis".

Przykład listy kontroli dostępu: goście mogą przeglądać własne artykuły, zarejestrowani użytkownicy mogą edytować te które sami napisali, a administratorzy mają pełną kontrolę nad treścią witryny.

Rola Zasób Dozwolone działania
Gość artykuły odczyt
Zarejestrowany artykuły odczyt, edycja własnych artykułów
Administrator artykuły odczyt, edycja wszystkich artykułów

Zend_Acl pozwala zdefiniować te wszystkie elementy i utworzyć taką właśnie listę, a następnie sprawdzić czy użytkownik ma prawo dostępu do zasobu którego zarządał. Sprawdzanie nie odbywa się automatycznie, sami musimy zdecydować w którym miejscu ma nastąpić.

Podsumowanie

Dzisiejszy artykuł to taki teoretyczny wstęp do zagadnienia. W następnym zaprezentuję możliwości Zend_Auth na kilku przykładach.


comments powered by Disqus