Makro {ifAllowed}{/ifAllowed}

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

Vím, že to už je lenost dost vysokého stupně, ale makra jako {ifAllowed user edit} by se docela hodily :D

enumag
Člen | 2118
+
0
-

Tak si je naprogramuj. :-P Někde na GitHubu mezi pull requestama se dokonce válí juznova funkční implementace, byť musím jedním dechem dodat, že se mi nelíbí a mám vlastní. :-)

Editoval enumag (27. 1. 2013 8:26)

Tomáš Votruba
Moderator | 1114
+
0
-

Juzna pull + fórum

@enumag: Je tvá někde k mání?

enumag
Člen | 2118
+
0
-

@Schmutzka: Zatím bohužel ne. Potřebuju nejdříve napsat testy a dokumentaci. :-/

EDIT: Ale narozdíl od juzny to mám jako nezávislé extension bez zásahů do Nette. :-)

Editoval enumag (28. 1. 2013 1:20)

Felix
Nette Core | 1186
+
0
-

enumag napsal(a):

EDIT: Ale narozdíl od juzny to mám jako nezávislé extension bez zásahů do Nette. :-)

Nemyslim si, ze formou extension to bude to prave orechove. Tohle musi byt v zakladu nette a musi z toho tesit da se rict vsechno.

enumag
Člen | 2118
+
0
-

Vzhledem k tomu, že Nette stejně bude rozděleno na několik repozitářů a každý z nich bude velmi pravděpodobně fungovat jako extension je to imho dobře. Kromě toho to že je to nyní jako extension nijak nebrání případné budoucí integraci. A nyní je to tak určitě lepší protože kvůli tomu nemusím udržovat vlastní fork.

Editoval enumag (28. 1. 2013 9:28)

mr.mac
Člen | 87
+
0
-

Hodně dlouho se o {ifAllowed} makrech mluví a překvapuje mě, že dosud se nedostaly ani do verze 2.1 jako standard. Ptám se tedy, existuje „nějaká“ funkční implementace, „snadno“ použitelná i pro začínající nettaře?
Děkuji za návod/radu.

Jan Tvrdík
Nette guru | 2595
+
0
-

{if $user->isAllowed('resource', 'action')} ti nestačí?

mr.mac
Člen | 87
+
0
-

To běžně používám, ale u href přidá mi nesmyslné opakování stejného presenteru a akce, viz příklad:

<a n:if="$user->isAllowed('Resource','action')" n:href="Resource:action, $id, ...">

Ideální by bylo to napsat jen jednou, např. takto (proboha nechytej mě za slovo):

<a n:ifAllowed('Resource','action', array($id, ...))>
Jan Tvrdík
Nette guru | 2595
+
0
-

@mr.mac: To má moc velký WTF faktor. Proč by mělo makro n:ifAllowed generovat atribut href?

enumag
Člen | 2118
+
0
-

@Jan Tvrdík: Ano, to je určitě WTF. Ale co bys řekl na tohle?

<a n:ifLinkAllowed="Resource:action, $id" n:href>
Jan Tvrdík
Nette guru | 2595
+
0
-

Pořád mi to přijde moc krkolomné, aby to bylo v Nette. Nicméně jako rozšíření super.

enumag
Člen | 2118
+
0
-

Souhlas.

mr.mac
Člen | 87
+
0
-

enumag napsal(a):
<a n:ifLinkAllowed=„Resource:action, $id“ n:href>

Ano takhle by to bylo fajn, nebo třeba:

<a n:ifAllowed="Resource:action" n:href="$allowed, $id">
//$allowed by vracelo resource, action

Editoval mr.mac (30. 12. 2013 16:26)

enumag
Člen | 2118
+
0
-

@mr.mac: To se mi nelíbí. Ono se to moje makro reálně nejmenuje ifLinkAllowed, ale ifLinkVerified a není omezené jen na autorizaci.

llook
Člen | 407
+
0
-

To vychází z předpokladu, že presenter == resource a akce == privilege, ale tak to vůbec být nemusí a reálně nebývá. Jako nějaké rozšíření Nette pro usnadnění práce tímto stylem asi OK, ale do core frameworku to podle mě nepatří.

mr.mac
Člen | 87
+
0
-

Dovolím si nesouhlasit, aby to nebylo součástí Nette. Asi Nette nepoužívám jako většina lidí, ale píšu v něm poměrně rozsáhlou firemní aplikaci (ne jen webovky) a prakticky v každé šabloně mám několik prvků, které musím ošetřovat zda má aktuální user na ně právo či ne a podle toho mu prvek zpřístupnit či ne, je to hroznej vopruz pořád dokola psát poměrně dlouhý zápis a nesplést se (buď to mám ok v isAllowed a blbě v n:href a nebo naopak). V Nette šablonách je spousta maker, která usnadňují formátování výstupu (některé pořád ještě chybí – označení textu při kliknutí do inputu apod.) a jinak pomáhají v prezentační části, ale tohle se týká funkcionality a není to pořádně řešeno.

mr.mac
Člen | 87
+
0
-

@llook: Ano já mám v aplikaci privilege = action (render) – tedy pro každou akci zkoumám práva.

enumag
Člen | 2118
+
0
-

@llook: Nikoli, mé řešení není takto omezené. Podle Presenter:action se najde reflexe a z ní anotace kde mám tu resoure+privilege:

/**
 * @Allowed("Resource", "privilege")
 */
public function actionDefault() { ... }

To mi dovoluje též automatickou kontrolu v checkRequirements.

Reálně to vypadá trochu jinak protože používám Kdyby/Annotations a ty mají mírně odlišnou syntaxi, ale to už je detail.

@mr.mac: V Nette imho tohle není potřeba, jako extension mi to dává lepší smysl. Ne každý to ocení a mnohem raději si do aplikace nainstaluju spoustu malých extesions než abych používal jeden obří framework kde je všechno „nějak“, ale kdoví jestli správně. Extensions jsou snadno nahraditelná, u součástí frameworku je to horší.

mr.mac
Člen | 87
+
0
-

Když bude extension dobře udělané a zdokumentované (což je často velká potíž, proto ty rozsáhlé diskuse komu co chodí/nechodí a hledání chyb), tak proti tomu nic nemám. Nejsem však natolik pokročilý uživatel, abych si makro psal sám a některé implementace sice možná existují (nevím kde), ale co jsem našel na fóru není moc zdokumentované – tedy jak to implementovat. Nebo to má být součástí Nette dokumentace – jak psát vlastní extensions, jak je implementovat? – nějaký standardizovaný postup by to chtělo.

Editoval mr.mac (30. 12. 2013 16:50)