[ Mystery @ 04.05.2013. 18:35 ] @
Koji je najbolji nacin za organizovanje administratorskih privilegija?

Recimo, imamo privilegije "moderator, "visi moderator", "super moderator" itd, ali bi valjalo da se svakome od njih mogu dodavati jos neki pristupi. Recimo, da moderator moze pristupiti nekoj alatki koju super moderator ima po "defaultu".

Kako ste to vi odradili?
[ dakipro @ 04.05.2013. 22:42 ] @
Par puta sam pravio sisteme privilegija na neki od sledecih nacina:

1 ako ti je sistem modularan i/ili imas uvek kontroller i metod kontrolera onda mozes ubaciti sve kontrolere i metode (akcije, kako god) u bazu i dodeljujes dozvoljene i zabranjene kontrolere i akcije svakoj od grupa korisnika (ili svakom od korisnika pojedinacno po potrebi)

2 ako imas malo specificnije zahteve nekim oblastima sajta, onda napravis svoj niz privilegija sa recimo "make_campaign", 'view_campaigns', "changing_item_price" itd i svakoj grupi (ili pojedinacnom korisniku) dodeljujes sta on moze da radi i proveravas to u delovima aplikacije. Recimo u templejtima pre nego prikazes ADD dugme ti pitas jal on moze da doda to sto se dodaje, da li moze da vidi neki od linkova i slicno.

Sam model privilegija pravis kako ti deluje najlogicnije u trenutku ali se trudi da koriscenje bude prilicno jednostavo jer ces verovatno da menjas posle po potrebi kad/ako uvidis neke drugacije sablone.

[ Mystery @ 04.05.2013. 23:37 ] @
Hvala na odgovoru Daki.

E, pa to. Smislio sam sablon, ali reko' da vidim kako su to drugi odradili.
[ dsivic @ 05.05.2013. 09:51 ] @
Ovako sam ja radio:

akcije mogu biti:

view, insert, edit, delete,... onda svakoj ovoj akciji dodijelim brojčanu vrijednost, zatim svakoj grupi odredim dokle mogu ici , prilikom login-a ucitam privilegije za korisnika i ispitujem sa nivo privilegija...

e sada ne znam da li je bolje jednom ucitati privilegije ili je bolje slati upit u bazu kada dode do određene akcije...?
[ Mystery @ 05.05.2013. 10:56 ] @
Mislim da to zavisi od tvoje aplikacije, tj. kako moras raditi. Ja ucitam privilegije odmah, a posebne privilegije samo kad treba.
[ Nikola Poša @ 06.05.2013. 10:52 ] @
Ja bih ti savetovao da probaš sa nekim gotovim rešenjem, npr. Zend_Acl komponentom. Nju, kao i sve druge komponente ZF-a možeš da koristiš potpuno samostalno i nezavisno od ostatka framework-a, uz eventualno neke dependency-e od kojih ta komponenta zavisi.

Zend_Acl je po mom mišljenju jedna od najkorisnijih komponenti Zend Framework-a, komponenta kakvu nema nijedan drugi framework (neka me neko ispravi ako grešim). Ključni pojmovi su resursi, role i privilegije. Sve se svodi na princip da neka rola može imati pristup nekom resursu sa određenim privilegijama. Pritom, te tri stvari su maksimalno apstrakovane, u smislu da resurs može biti praktično bilo šta, fajl, red u bazi, mrežni resurs, šta god. Dakle na developeru je da postavi ACL prema svojim potrebama. Evo jednog primera iz dokumentacije, čisto da vidiš kako to uopšte izgleda i kako se Zend_Acl koristi:
Code:
$acl = new Zend_Acl();
     
$acl->addRole(new Zend_Acl_Role('guest'))
    ->addRole(new Zend_Acl_Role('member'))
    ->addRole(new Zend_Acl_Role('admin'));
     
$parents = array('guest', 'member', 'admin');
$acl->addRole(new Zend_Acl_Role('someUser'), $parents);
     
$acl->add(new Zend_Acl_Resource('someResource'));
     
$acl->deny('guest', 'someResource');
$acl->allow('member', 'someResource');
     
echo $acl->isAllowed('someUser', 'someResource') ? 'allowed' : 'denied';

Ovde imaš još jedan bolji primer iz prakse, gde se Zend_Acl koristi za definisanje prava pristupa u okviru nekog CMS-a.

Preporučujem ti da baciš pogled i na ovo Zend_Acl poglavlje u manual-u, koje opisuje još jednu veoma korisnu dodatnu funkcionalnost ove komponente, a to je pisanje dodatnih conditional assert-a, koji se mogu "zakačiti" na svaki ACL rule kojeg definišeš, čime mogućnosti postaju zaista neograničene.
[ momca96 @ 06.05.2013. 12:49 ] @
Evo mozes npr. ovako:
http://pastebin.com/CyTBFcAX

Ovo sto sam napravio je samo primer ti iskoristi i napravi za bazu...

Preporucujem ako radis sa bazom da pises na papir broj privilegije.

Cuvas taj 1 broj koji dobijes i proveravas funkcijom. Brze se ucitava nego da izvlacis iz baze svaku privilegiju.

Znaci na pocetku uzmes privilegije iz baze i onda gde god treba ti proveris sa funkcijom.
[ Mystery @ 06.05.2013. 18:30 ] @
Odradio sam ovo, napisao sam i kako u proslom postu, ali mozemo jos diskutovati na ovu temu. :)