Dozvole i ACL
Nasljedjivanje
Dozvole se definiraju nad nekom jedinicom sadržaja - site, kategorija/stranica, vijest, dokument.
Dozvole se daju korisniku ili grupi korisnika.
Dozvole mogu biti READ, WRITE, AUTHOR/SUGGEST, ADMIN/OWN itd. (Skup dozvola nije ograničen i po potrebama se može proširiti.)
Dozvola korisniku je jača od dozvole grupi. Ako je dozvola dana ili oduzeta korisniku zanemaruju se dozvole koje bi taj korisnik imao kao pripadnik grupama kojima je dana dozvola.
Kako postoji hijerarhija jedinica sadržaja tako postoji i nasljeđivanje dozvola.
Ako je jednoj grupi ili korisniku definirana dozvola više puta u više razina, u obzir se uzima dozvola definirana hijerarhijski najbliže jedinici sadržaja, ali opet se uzima pravilo: dozvola korisniku je jača od dozvole grupi. Npr. ako je Peru nad siteom definirano pravo READ, ali mu je nad konkretnim dokumentom PeroNemaPravo.doc zabranjeno READ, on neće moći pristupiti tom dokumentu.
Alternativni opis
Postoje tri pojma:
SUBJEKT = korisnik, grupa korisnika
OBJEKT = dokument/folder
PRAVO = za dokumente READ ili OWN, za foldere READ, SUGGEST, AUTHOR, OWN (svako od prava ima vrijednost DA ili NE)
Jedan zapis u ACL-u mora imati definirane sve tri vrijednosti.
Vrijede pravila:
• PRAVO korisniku je jače od PRAVA grupi. Ako je PRAVO dano ili oduzeto (vrijednost DA ili NE) korisniku, zanemaruju se PRAVA koje bi taj korisnik imao kao pripadnik grupama kojima je dana dozvola.
• ACL se može nasljeđivati s jedne razine na drugu (npr. sa foldera na podfolder ili dokument što je defaultno ponašanje document managementa)
• Ako je jednoj grupi ili korisniku definiran ACL više puta u više razina, u obzir se uzima PRAVO definirano hijerarhijski najbliže jedinici sadržaja (dokumentu ili folderu), ali opet se uzima pravilo: PRAVO korisniku je jače od PRAVA grupi.
• Zabrana (PRAVO=Ne) u kontekstu korisnika je jače od dozvole (PRAVO=Da)
• U kontekstu grupe, dozvola (PRAVO=Da) je jače od zabrane (PRAVO=Ne)
Ostalo
Za sada, možete pogledati AclHacks za hands-on stvari koje možete napraviti direktno u bazi.
Hacking ACL
Ovo je quick guide kako napraviti zanimljive stvari sa ACL-ovima.
Nasljeđivanje ACL-ova za kategorije
Kako pogledati koja ktegorija nasljeđuje od koje?
select
(select url from kategorija where id = parent_object_id),
(select url from kategorija where id = object_id)
from acl_inherits
where acl_id = 'kats' and parent_acl_id = 'kats'
Prava pristupa i dozvole za sadržaje
select UserCanDoOnObject(user_id, perm, acl_id, object_id);
perm određuje pravo. Postojeće permisije mogu se pogledati sa:
strix=# select * from perms order by flag ;
Neke od njih su aliasi tako da se iste dozvole mogu koristiti u razlicitim kontekstima.
Kratko objašnjenje kako su zamišljene osnovne razine dozvola u STRIXu:
- PERM_READ - korisnik s tom dozvolom ima pravo pristupa (u kontekstu kategorije tj. stranice) odnosno pravo čitanja sadržaja (u kontekstu jedinice sadržaja)
- PERM_WRITE ili njezin alias PERM_SUGGEST (alias u kontekstu dozvola na foldere) - korisnik ima pravo predlaganja sadržaja, glasanja, komentiranja, postavljanje pitanja. Predloženi sadržaj se ne objavljuje direktno nego se čeka dozvola administratora stranice koji za taj sadržaj može dozvoliti objavu ili odbiti.
- PERM_AUTHOR - korisnik ima pravo direktne objave svog contenta bez posredstva administratora. Korisnik s tom dozvolom ne može mijenjati tuđi content, ali može svoj.
- PERM_ADMIN - korisnik je administrator stranice.
acl_id su tipovi sadržaja. Mogu se pogledati sa:
strix=# select * from acl_register ;
object_id je identifikator objekta (obično primarni ključ) objekta za koji se provjerava permisija.
Primjer korištenja:
select UserCanDoOnObject(1, 'PERM_ADMIN', 'news', 42 );
Updated by dpavlin@hidden on Dec 14 2:02am
Posted by dpavlin@hidden on Nov 17 2:40pm
Uvod u STRIX engine
Svaka web stranica koju engine generira i koja ima svoj URL se strogo veže uz jednu kategoriju (kategorija). Za svaku stranicu, tj. kategoriju engine učitava iz baze njen izgled i sadržaj. Izgled stranice je određen pre-definiranim glavnim templateom (template) i rasporedom modula unutar nje. Moduli (modules) su funkcionalno neovisni dijelovi web stranice koji generiraju konačan sadržaj. Za svaku kategoriju, moduli se po želji odabiru i raspoređuju unutar nje (layout).
Više uređenih kategorija čini jedan site (site). Site služi za zgodno grupiranje npr. prava pristupa ili dizajna.
Engine podržava do 3 uređene (poredane) liste modula (npr. za lijevi, srednji i desni stupac).
Podržana je i jedna ne-uređena (slobodna) lista modula, čija pozicija prikaza je definirana unutar glavnog templatea (npr. glavna navigacija, baneri, footer, breadcrumbs, datum i vrijeme i slične). Ovi moduli će se prikazivati na svim stranicama koje imaju isti template.
Module je moguće definirati i za cijeli site, u kojem slučaju se oni prikazuju iznad ili ispod modula definiranih za pojedinu stranicu (pre_layout).
Prilikom generiranja stranice, engine dohvati sve instance modula za trenutnu kategoriju, izvrši ih, a njihove generirane sadržaje posloži u glavni template.
Opisi glavnih relacija
kategorija
Foreign-key constraints:
"$3" FOREIGN KEY (site_id) REFERENCES site(id) ON UPDATE CASCADE ON DELETE
CASCADE
"$2" FOREIGN KEY (lang) REFERENCES lang(id) ON UPDATE CASCADE ON DELETE CASCADE
"$1" FOREIGN KEY (template_id) REFERENCES "template"(id) ON UPDATE CASCADE ON
DELETE CASCADE
site
template
Foreign-key constraints:
"$1" FOREIGN KEY (design_id) REFERENCES design(id)
Glavni template (tfilename) je html/smarty file, koji se svaki put koristi prilikom generiranje konačne stranice. U fileu su definirane pozicije za prikaz uređenih i slobodih modula, kao i includeovi za CSS i JS.
design
layout
Foreign-key constraints:
"$3" FOREIGN KEY (module_id) REFERENCES modules(id) ON UPDATE CASCADE ON DELETE CASCADE
"$2" FOREIGN KEY (kategorija_id) REFERENCES kategorija(id) ON UPDATE CASCADE ON DELETE CASCADE
"$1" FOREIGN KEY (user_id) REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE
pre_layout
Foreign-key constraints:
"$2" FOREIGN KEY (module_id) REFERENCES modules(id) ON UPDATE CASCADE ON DELETE CASCADE
"$1" FOREIGN KEY (template_id) REFERENCES "template"(id) ON UPDATE CASCADE ON DELETE CASCADE
modules
Updated by igor.plantas@hidden on Nov 29 6:27am
Posted by dpavlin@hidden on Nov 17 2:43pm
U STRIXU postoje dvije vrste plugina:
- Smarty plugini (sysinc/plugins/*.php) - koriste se u templateima
- interni plugini za različite infrastrukture (inc/plugins/*) - koriste se u PHP datotekama
Smarty plugini
Detaljna dokumentacija o njihovoj arhitekturi nalazi se na http://smarty.php.net/manual/en/plugins.php
Osim standradnih plugina koji dolaze sa Smartyjem, u STRIXU postoje i custom-made Smarty plugini:
interni plugini
Interni plugini postoje za sljedeće infrastrukuture (svaka ima svoj direktorij u inc/plugins):
za ACL vidi UserCanDoOnObject
Updated by dpavlin@hidden on Nov 18 5:14am
Posted by dpavlin@hidden on Nov 17 2:42pm
|
Weblog Navigation
Loading...
|