Citat:
Originalno napisao zigor
Sve zavisi od toga sta ti tacno treba.
Mi obicno radimo metodu 2: lista (moze i drvolika struktura) objekata, lista akcija u drugoj tabeli, i onda dozvole sta ko sme u trecoj tabeli. Drvolika hijerarhijska struktura je dobra, jer ne moras da zadajes za svaki objekat pojedinacno, nego mozes da kazes: korisniku je dozvoljena akcija rekurzivno za ovaj objekat i svu njegovu decu.
|
Sistem koji sam koristio u jednoj aplikaciji razdvaja dozvole i grupe. Dozvole su hijerarhijski organizovane (npr, da bi čovek dodao stranicu na sajt treba da ima pristup administraciji, pristup pages modulu i pravo da dodaje stranice; ako je bilo šta od toga false ništa od dodavanja). Pri definisanju dozvole omogućeno je setovanje default vrednosti tako da opšti slučaj čak i ne zahteva konkretnu vezu između grupe i dozvole sa vrednošću već može da se koristi podrazumevana vrednost.
Dozvole se keširaju u jedan asocijativni niz tako da to odstranjuje većinu probleme sa performansama. ($perms['group_id']['permission_name'] = value). Evo ga izvod iz cachea za tu aplikaciju:
PHP kôd:
<?php
return array (
1 =>
array (
'admin_index' => true,
'auth_add_group' => true,
'auth_add_permission' => true,
'auth_add_user' => true,
'auth_create_cache' => true,
'auth_delete_group' => true,
// ...
));
?>
Dodavanje akcija je prilično jednostavno. Pošto je sistem MVC projuri kroz sve dostupne kontrolere, skonta public metode (akcije) i na osnovu toga ti ponudi formu pomoću koje možeš da dodaš masu dozvola u jednom prelazu. Kasnije ih samo ispreturaš u hijerarhiji ako imaš potrebu za tim. Možeš da se iživljavaš i napraviš i da sinhrnoziju dozovle u bazi sa definisanim akcijama u kontrolerima (ako recimo izbaciš određenu akciju) itd, ali to su već finese u koje vredi uložiti vreme ako ćeš to rešenje često koristiti.
Rešenje samo po sebi se možda čini komplikovanim i definitivno nije za svaku skriptu, ali ako imaš dobru osnovu i potrebu za ovim relativno lako se implementira.