Dziś jest piątek, 22 sierpnia 2008 roku (z kalendarza...)

Systemu uprawnień ciąg dalszy

Icon

23.05.2007, 15:12

PHP

Komentarze (2)

Powrót

Dzisiejszy wpis miał być o czym innym, ale opisywany dziesięć dni temu system uprawnień doczekał się już bardziej rozbudowanej formy oraz kilku nowych idei, które niebawem będę implementować i które warto przedstawić. Tymczasem dzisiaj zmontowałem nowy artykuł opisujący dokładnie jego budowę i działanie. Aktualnie opublikowany tylko na Zyxist.com, jutro lub pojutrze wrzucę go też na Webcity. Wróćmy jednak do nowych pomysłów.

Zauważyłem, że wraz ze wzrostem serwisu pojawiać się będzie coraz większa liczba uprawnień, które skrypt najprawdopodobniej będzie musiał każdorazowo wczytywać z bazy nawet, gdy nie są one wykorzystywane. Łatwo sobie wyobrazić, co będzie mieć miejsce, gdy zdefiniujemy tysiąc zasobów i jednej z grup damy uprawnienia do 700. Oznacza to ilość niepotrzebnie zasysanych rekordów liczoną w setkach, podczas gdy pojedyncza akcja nie sprawdza więcej, niż kilka uprawnień naraz. Rozwiązaniem tego problemu mogą być różne formy cache'owania.

Pierwsza, to cache'owanie całej listy dla każdej roli z osobna, jako że tak dużo ich też w systemie nie ma, a same uprawnienia nie zmieniają się codziennie. Jednak tutaj nadal musimy wczytywać tego strasznie dużo, tyle że tym razem z pliku. Trochę bardziej rozsądne wydaje się napisanie mechanizmu dynamicznie określającego, co jest potrzebne, a co nie. Popatrzmy: ładuje się jakaś akcja. ACL sprawdza, czy ma w jakimś pliku zapisaną listę uprawnień, które będzie ona sprawdzać. Jeżeli znajdzie się taka, wczytuje ją i ładuje z bazy tylko te uprawnienia, które będą sprawdzane. W przeciwnym wypadku po staremu ładuje wszystko, lecz tym razem w trakcie wywoływania metody isAllowed() zapamiętuje sobie, o co skrypt się pytał. Pod koniec obsługi żądania tablica ze spisem żądanych uprawnień jest zrzucana do pliku tak, aby następne żądania nie musiały już pobierać wszystkiego. Według mnie brzmi to rozsądnie.

Powrót

Komentarze

Napisał eRiZ w czwartek, 24 maja 2007 o 15:32

Też kiedyś głowiłem się, jak ten problem rozwiązać i przyszła mi pewna myśl - tabela typu memory i podczas logowania użytkownika selecta wyniki przekierowywać do tej tabeli.

Owszem, można jeszcze na plikach, a to takie moje skromne zdanie... ;]

Napisał murwazy w niedzielę, 17 czerwca 2007 o 23:43

"Do większych projektów przydaje się również możliwość rozbudowywania systemu o dodatkowe źródła uprawnień. Przykładowo, nasz serwis domyślnie przechowuje w bazie danych listę uprawnień "Zezwól/Odmów" do poszczególnych części panelu administracyjnego, lecz część odpowiedzialna za CMS posiada własne listy uprawnień dla każdego widocznego obiektu w formacie "Dodaj/Edytuj/Usuń/Wyślij konkurencji" itd. Rzecz jasna, kiedy pracujemy w panelu do zarządzania CMS'em, system musi dodatkowo ładować uprawnienia zapisane w tym drugim formacie."

calosc mam zrobiona w ten sposob.
kontroler to podobnie jak w zf klasa, metoda to konkretna akcja (np remove_from_category, lower, add), w takim ukladzie latwo o limitowany dostep do wszystkich tych klas.

w kontrolerach i ich akcjach - w komentarzach - definiuje sobie ich opisy. napisalem klase, ktora korzystajac z mechanizmu refleksji wyciaga opisy i zwraca tablice asocjacyjna z nazwami kontrolerow i ich opisami (uzywam tego przy nadawaniu uprawnien, jesli dodam jakas nowa funkcjinalnosc automatycznie mam mozliwosc przydzielania uprawnien).

przy nadawaniu uprawnien zapisuje do bazy cos takiego:
nazwa_kontrolera/nazwa_akcji
do tego dopisuje id operatora.

w praktyce wyglada to tak:

kontroler

 
/**
 * @acl kategorie
 */
class cms_categories_controller extends ActionBase {
	/**
	 * @acl listowanie kategorii
	 *
	 * tu reszta kommenta
	 * @return void
	 */
	public function index() {
 
		// kod
	}
 
	/**
	 * @acl dodawanie kategorii i tlumaczenia w wybranym jezyku
	 */
	public function add() {
		
	}
}


moge uzywac takze tagow
@acl denied - dla klasy, nie skanuje jej i nie ma mozliwosci przypisania uprawnien, jest dostepna dla wszystkich

jesli przy metodzie nie mam taga @acl nie jest brana pod uwage przy skanowaniu.

bardzo to wygodne.

Strona 1 z 1 :: 1

Skomentuj

NickInformacja
E-mailTylko do użytku wewnętrznego.
WWWNie zapomnij o http://
LayoutNapisz tu, czy widzisz dzienny czy nocny layout.
WpisFormatowanie wiki
Internauto, pamiętaj! Wolność to nie samowola - dbaj o kulturę wypowiedzi oraz dyskusji w sieci.

Na Zyxist.com panuje swoboda wyrażania opinii oraz krytyki pod dowolnym adresem. Jedyny warunek: musi być ona kulturalna i rzeczowa. Na chamstwo, prostactwo lub jawne obrażanie kogokolwiek nie ma tu miejsca i takie komentarze są bardzo szybko usuwane. Jeśli zamierzasz polemizować z treścią wpisu, wpierw uważnie ją przeczytaj.

© Tomasz "Zyx" Jędrzejewski 2005 - 2008 | Wykonanych zapytań: 2 | Serwer wirtualny zapewnia