Zjištění všech privileges
- kedrigern
- Člen | 102
Chtěl jsem vypisovat tabulku rolí a přístupů (pro rychlý grafický přehled adminů).
Mám třídu Acl extends
Nette\Security\Permission,
která je servis.
Od Nette\Security\Permission
mám metody: getRoles
a getResources
, ale již nemá metodu
getPrivileges
.
Chtěl jsem si jí napsat v poděděné třídě, ale ouha! Proměnná
$rules
je private
.
- Lze toto nějak rozumně obejít? (Já to tahám z DB, ale je to škoda, když už to mám jednou v paměti)
- Nebylo by lepší, aby ty členy byly
protected
?
- Tomáš Kolinger
- Člen | 136
Private je private. To obejít nejde :).
Předpokládám, že výpis práv je na straně administrace a tam nemá moc smysl šetřit s jedním dotazem. Pokud na tom budeš trvat, tak máš ještě jednu možnost – pravidla určitě kešuješ – co si je tahat z keše?
- Tomáš Kolinger
- Člen | 136
Jediný důvod je zapouzdřenost objektu. Každý objekt by měl mít ideálně jen private atributy. Pro manipulaci a operace slouží metody… Takže když už, tak mít public getter na pravidla…
Tak i tak se snažíš něco zbytečně ohnout a nevím proč. Jde to špatně, jelikož to na to není určený.
Data se mají tahat z modelu, nikoliv ze služeb jako je authorizator. Takže pokud ti jde o těch pár dotazů, tak použí keš – drž je např. v modelu. Když o ně požádá authorizator, tak si je ulož do atributu v modelu a když si o ně řekneš podruhé, tak je vytáhni z toho atributu. Je to čisté řešení a nebudeš muset nic přepisovat.
Editoval Tomáš Kolinger (26. 2. 2013 11:39)