Zjištění všech privileges

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
kedrigern
Člen | 102
+
0
-

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.

  1. 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)
  2. Nebylo by lepší, aby ty členy byly protected?
Tomáš Kolinger
Člen | 136
+
0
-

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?

kedrigern
Člen | 102
+
0
-

No a má nějaký hlubší důvod, že jsou dané proměnné private? Jasně má to interface, čili to mohu přepsat celé znova, ale přehlednosti a kompatibilitě to jistě nepřidá :(

Tomáš Kolinger
Člen | 136
+
0
-

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)

Aurielle
Člen | 1281
+
0
-

Pokud to chceš opravdu „quick'n'dirty“, můžeš to ohackovat přes reflexi a setAccessible…