- calosc jest do sciagniecia tutaj
- w Simple_Auth klasa Simple_User posiada nowa metode get_roles(), w Simple_Modeler nic sie nie zmienilo
- instalacja tak sama jak innych modulow czyli do /modules/ i uaktywnic w config.php
- wchodzimy na adres http://example.pl/acldemo i mozemy sie cieszyc 12 przykladami uzycia
a teraz konkretniej, czyli jak to dziala.
calosc opiera sie na dwoch rzeczach: rolach oraz zasobach. w config/simple_acl.php definiujemy domyslne role (user, admin itd) wraz z ich dziedziczeniem - jest to wazne, mozna bowiem miec bazowa role user z zablokowana edycja i dziedziczace po niej user_forum z np. odblokowana edycja forum skutkiem czego bedzie mozliwosc edycja tylko i wylacznie forum. analogicznie dziedziczone moga byc zasoby - wszystko to siedzi w pliku z konfiguracja, wystarczy popatrzec aby zrozumiec.
samo uzycie sprowadza sie do:
$this->simple_acl->allow('guest','blog');
$this->simple_acl->deny('guest','blog','read');
echo ($this->simple_acl->is_allowed('guest','blog','read') ? 'yes' : 'no');
pierwsza linijka dodaje roli guest prawo do wszystkich czynnosci w zasobie blog. kolejna zabiera mozliwosc czytania. ostatnia sprawdza czy rola guest moze czytac bloga. prawda, ze proste? w przykladowym kontrolerze jest wiecej przykladow, wystarczy spojrzec.
mozna jednak dokonac sprawdzenia zasobow nieco inaczej. mianowicie:
$data = Simple_Modeler::factory('articles',2);
$this->simple_acl->allowed($data,'edit') ? 'yes' : 'no');
w pierwszej linijce wczytujemy artykul z id = 2. w kolejnej sprawdzamy... no wlasnie co? ano sprawdzamy czy obecnie zalogowany user (a dokladnie to jego role wczytywane przez simple_user i get_roles) ma mozliwosc edycji wczytanego obiektu. system acl sam pobiera usera (z sesji), zasob (z modelu poprzez simple_modeler i get_table_name, czyli trzeba dodac zasoby z nazwami tabel), a nastepnie sprawdza czy ktorakolwiek z rol usera daje mu mozliwosc edycji.ale to nie wszystko :) jest jeszcze jeden 'myk'. mozna zrobic cos takiego:
$this->simple_acl->allow('user','articles','edit', new User_Articles_Assert);
echo ($this->simple_acl->allowed($data,'edit') ? 'yes' : 'no') ;
gdzie User_Articles_Assert jest klasa definiujaca powiazanie danego modelu z userem. dzieki ustawieniu w niej np. array('id'=>'user_id') mozemy zablokowac userowi edycje artykulow napisanych przez inne osoby niz on sam, a odbywa sie to (jak nie trudno sie domyslic) poprzez porownanie id obecnie zalogowanego usera z polem user_id jakie znajduje sie we wczytanym z bazy rekordzie.
prawda, ze piekne? zyc nie umierac. calosc na pewno wymaga drobnych poprawek, na razie to wersja 0.1 - sam modul ACL nie wspiera w zaden sposob zapisywanie do bazy rol czy powiazan user-rola, wszystko opiera sie o edycje konfiguracji. nic nie stoi na przeszkodzie aby napisac dodatkowe metody, ktore beda operowaly na bazie i z niej pobieraly dostepne role, zasoby jak i ich powiazania z userami.
EDIT:
zarowno Simple Auth jak i Simple Modeler nie zalapaly sie do paczki wiec kazdy musi sam je sobie pobrac plus dodac nowa metode to Simple_User:
public function get_roles()
{
return array('user','admin');
}ktora nie robi nic innego jak zwraca role uzytkownika. docelowo powinno to byc pobierane z bazy :)

Ten komentarz został usunięty przez administratora bloga.
OdpowiedzUsuń na zawsze