Implementace ACL na úrovni modelů

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

Dobrý den,

všude slyším, že se ACL má implementovat na úrovni modelu a že implementace v šabloně je špatná. Sám zatím ACL implementuji do presenterů a navíc se občas nevyhnu v šabloně něčemu takovému:

<?php
{if $user->isAllowed($presenter->getName(), "delete")}
	<a href="{link delete!, $usr->id}">SMAZAT</a>
{/if}
?>

Jaký je tedy nejlepší postup implementace?

JuniorJR
Člen | 181
+
0
-

Na tom co si napsal, nevidím nic moc špatného. ACL IMO „musíš“ řešit dá se říct na všech 3 vrstvách. Minimálně tedy v presenteru+šabloně s tím, že ACL je definováno pomocí nějakého modelu, s kterým presenter pracuje.

Editoval JuniorJR (6. 12. 2011 15:36)

Šaman
Člen | 2666
+
0
-

Model by se neměl spoléhat na nějaké inputy z šabony/presenteru a měl by si kontrolovat konzistenci i ACL. To je logika modelu a ACL tam patří.

Šablona má zase správně zobrazit odkaz na smazání uživatele jen pokud na to má někdo právo, takže se zase zeptá ACL. To je view logika a ACL tam patří taky.

Jde jen o to, aby model nespoléhal na kontrolu v šabloně (navíc tam se to dá obejít a ručně upravit odkaz) a aby na pokus o smazání někoho na koho nemáme práva zareagoval nějak korektně (vyhodí hlášku nebo chybu, ale nesmí to smazat).

vojty
Člen | 19
+
0
-

Díky, už je mi to jasné.