Autorizace všech handle (něco jako beforeHandle)

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

Rád bych prováděl autorizaci defaultně u všech handlů. U presenterů a jejich action to velmi spolehlivě a přehledně zajistí metoda startup v presenteru.

Příklad:
Mám seznam článků (např. presenter Articles, action list), kde může mazat admin a ostatní pouze seznam vidí. Chci mazání udělat AJAXově. Pak do příslušného presenteru umístím metodu handleDelete. Nicméně pokud oprávnění nehlídám přímo v metodě, tak bude platit stejné oprávnění jako pro presenter a action (znovu se nezkontroluje).

Lze toto nějak řešit? Něco jako metoda beforeHandle (koukal jsem, že kdysi v Nette byla).

(Jde mi čistě o návrh, vyřešit to ošklivě umím, ale nelíbí se mi daný kód).

enumag
Člen | 2118
+
0
-

Hezčí je kontrolovat to v checkRequirements pomocí anotací (imho). :-)

Editoval enumag (21. 2. 2013 13:45)

kedrigern
Člen | 102
+
0
-

Mohl bych poprosit o ukázku? Jak se např. anotace předají další metodě?

enumag
Člen | 2118
+
0
-

Nette předává reflexi volané metody handle/action/render té metodě checkRequirements, z té reflexe si anotace už snadno vytáhneš.

Chybu v checkRequirements vyjádříš vyhozením ForbiddenRequestException.

Editoval enumag (21. 2. 2013 15:27)

bene
Člen | 82
+
0
-

Hm, škoda, že nic takového není v dokumentaci. Kdybych si sem tam nečetl forum, tak to ani neznám :-(

enumag
Člen | 2118
+
0
-

V dokumentaci to není protože zatím je v Nette jen ta metoda checkRequirements a kontrola přihlášení pomocí anotace. Další anotace by si člověk stejně musel udělat sám.

Chystám se vydat svou implementaci jako doplněk, ale vzhledem k tomu jak málo času teď mám nedokážu říct kdy konečně dopíšu testy (bez nich to nezveřejním).