Přístupová práva
Obsah
Popis implementace správy přístupových práv ve FreenetISu
Aktuální přístupová práva pro FreenetIS jsou založena na PHP GACL. Samotná knihodna byla odstraněna, ale její sytém tabulek byl zachován.
Popis SQL tabulek knihovny PhpGacl
V PhpGaclu je všechno postavené na objektech ACO, ARO a AXO.
ACO - objekty operací
ARO - objekty (nebo skupiny objektů), které chtějí jednotlivé operace (ACO) vykonávat
AXO - objekty (nebo skupiny objektů), nad kterými chtějí jednotlivé ARO nějakou operaci (ACO)
acl
Tabulka definující jednotlivé přístupová pravidla.
Obsahuje sloupce id, section_value, allow, enabled, return_value, note, updated_date.
id - identifikátor, důležitý pro propojení s ACO, ARO a AXO
section_value - název sekce, kam toto pravidlo patří
allow - 1 => pravidlo operaci povoluje, 0 => pravidlo operaci zakazuje
enabled - 1 => pravidlo je povolené, 0 => pravidlo je zakázané
return_value - zatím netuším
note - komentář, popisující funkci pravidla (např. Administrátoři mohouu dělat vše)
updated_date - timestamp poslednín aktualizace pravidla
acl_sections
Tabulka definující jednotlivé sekce pravidel.
Defaultně jsou v PhpGaclu dvě sekce - System a User, FreenetIS ale používá jen User.
Obsahuje sloupce id, value, order_value, name a hidden.
id - identifikátor, víceméně zbytečný, protože pravidla se do sekcí přiřazují pomocí hodnoty (value)
value - krátký název bez mezer, používá se pro přiřazení jednotlivých acl do sekcí
order_value - zatím netuším
name - dlouhý název, popis
hidden - 0 => sekce je viditelná, 1 => je skrytá
acl_seq
Tabulka, jejíž jediným účelem je zapamatování si aktuálně posledního id tabulky acl.
PhpGacl (bůhví proč) nepoužívá u tabulek auto increment.
Obsahuje sloupec id.
id - poslední id v tabulce acl
aco
Tabulka definující jednotlivé objekty ACO. Ve FreenetISu jsou buď ACO pro vykreslování menu (sekce menu) a ACO pro obecné operace (sekce freenetis) - view_all, view_own, edit_all, edit_own, delete_all, delete_own, new_all, new_own, confirm_all, confirm_own, ... které se používají výhradně s AXO objekty.
Obsahuje sloupce id, section_value, value, order_value, name a hidden.
id - identifikátor, nedůležitý (pro propojení s acl v tabulce aco_map se používá value)
section_value - jméno sekce, definované v aco_sections
value - krátký název bez mezer, používá se pro přiřazení jednotlivých aco do sekcí a pro propojení s jednotlivými acl pravidly v aco_map
order_value - zatím netuším
name - dlouhý název, popis
hidden - 0 => sekce je viditelná, 1 => je skrytá
aco_map
Propojuje ACO objekty s jednotlivými acl pravidly. ACO jako jediné (z trojice ACO, ARO a AXO) nemá možnost shhlukování do skupin, proto není žádná další dabulka aco_groups_map.
Obsahuje sloupce acl_id, section_value a value.
acl_id -
section_value -
value -
aco_sections
Sekce pro jednotlivé ACO, FreenetIS používá pouze dvě: menu - pro ACO objekty týkající se vykreslování menu, a pak freenetis - pro definici obecných ACO operací (zobrazení, editování, mazání a potvrzování).
Obsahuje sloupce id, value, order_value, name a hidden.
id - identifikátor sekce (není pro nic potřeba)
value - samotný název sekce (u nás menu a freenetis)
order_value - zatím netuším
name - popis sekce
hidden - 0 => sekce je viditelná, 1 => je skrytá
aro_groups_map
přiřazuje k jednotlivým ACL pravidlům skupiny uživatelů.
Příklad:
Vytvoříme pravidlo "Zájemci o členství a řádní členové mohou dělat XYZ".
Toto pravidlo bude v tabulce "acl" reprezentováno novým řádek s id=27, ve kterém je uloženo hodnota "allow";
Pokud "řádní členové" mají id=22 a zájemci o členství id=23, pak v tabulce aro_groups_map při vytvoření tohoto pravidla přibudou 2 nové řádky:
acl_id | group_id
27 | 22
27 | 23
axo_groups_map
Podobné jako aro_groups_map, ale pro AXO