Prístup ku komponentám – potrebný login

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

Ako mám prinútiť používateľa, aby nemal právo šahať na komponenty, keď nie je prihlásený? To znamená, že mám login, fajn, funguje. Odhlásim sa. Ale keď prejde na nejaký „pod“-presenter tak je akoby v systéme znova. Ide o to, aby pri prístupe na tieto komponenty bol presmerovaný na Login. Bohužiaľ, technika, ktorú používam teraz, mi príde neefektívna (do každého presenteru, metódy renderDefault, písať: if(!$this->user->isLoggedIn()) { ... ). Preto sa pýtam, ako na to? Je nelogické to písať do BasePresentra (dedia to všetky presenteri, aj LoginPresenter)… Implementácia Autorizátoru mi príde zbytočná, navyše ide o prístup pár používateľov a taktiež ide asi o 6 presenterov…

hAssassin
Člen | 293
+
0
-

@Peppy > proc ti prijde nelogicky to davat do BasePresenteru? Mam to v nem v metode beforeRender(). Je fakt ze z neho dedi i SignPresenter (LoginPresenter), ale to sem vyresil jednoduse tak, ze BasePresenter ma property checkUser = true a v SignPresenteru ji zmenim na false a pokud je false, presmerovani se neprovede, cili testuju jen na jednom miste a vzdy spravne presmerovavam na SignPresenter, pokud potrebuju.

Editoval hAssassin (8. 8. 2011 21:56)

22
Člen | 1478
+
0
-

..asi bych si udělal nějaký SecurePresenter a všechny presentery, které potřebují hlídat by dědili od SecurePresenteru..

uestla
Backer | 799
+
0
-

Já bych zase doporučil jednoduchý ACL o 2 rolích (příklad),

  • guest – nepřihlášen
  • user – přihlášen, dědí od role guest – u authenticatoru nezapomeň vracet Identity s touto rolí

presenterech a privilegiích.

Ve startupu BasePresenteru pak nastavit automatickou kontrolu (příklad – konkrétně 5. kód v dané sekci).

Přičemž bych nezapomněl na oblíbený nešvar, a sice zakázat přihlášenému přístup na přihlašovací stránku, něco jako:

// uvnitř ACL konstruktoru
$this->deny('user', 'Login', 'login');
Jan Endel
Člen | 1016
+
0
-

Pokud to chceš řešit bez pomocné proměné, tak se to dá i $this->action !== 'login' || $this->presenter->name = 'Login' co ti taky umožní od něj dědit, ale asi nejčistší je to co radí 22.

Peppy
Člen | 137
+
0
-

Už som to vyriešil cez SecuredPresenter. Najjednoduchšie riešenie. No. Len by tomu trebalo dať nejaký rozumný názov (SecuredPresenter u mňa evokuje pripojenie cez SSL)…