aplink – vlastní makro na odkazy s autorizací
- Jakub Šulák
- Člen | 222
Zdravím,
zkouším si vytvořit vlastní makro (pracovní název {aplink}).
Ten by měl dělat to stejné co {plink destination}, ale před tím by měl
ověřit, zda má daný uživatel oprávnění otevřít daný odkaz (presenter,
action). Samozřejmě kontrola musí pak být i na straně presenteru, to
je jasné.
Bohužel do šablon nevidím (do vnitřku) a netuším, jak to tam napojit. Než se do toho tedy pustím – neexistuje nějaká jednoduchá možnost registrace autorizační služby k makru plink?
Nebo nemáte toto již někdo vyřešeno?
Díky
- Jakub Šulák
- Člen | 222
stačilo by odkaz na nějakou definovanou stránku a přidat odkazu class=„hidden“ (ale to přidání class nevím zda je možné, protože {aplink} dávám do href="")…
- Jakub Šulák
- Člen | 222
a jakým způsobem jsou dělány odkazy na těchto stránkách? Myslel jsem si právě, že existuje nějaký způsob, jak to odchytit. Nebo by stačilo, aby mi to vracelo danou konstantu a pak mohu pomocí JS zakázat vykreslení (skrýt). Kdo bude mít JS vypnutý, zobrazí se mu odkaz, na který nelze kliknout (odkaz neexistuje).
Ale já hledám nějaký manuál, příklad, apod. kde by bylo osvětleno, jak to napsat. V dokumentaci je jen pár příkladů a z API nejsem moudrý.
- Jakub Šulák
- Člen | 222
V noci jsem nad tím přemýšlel, tam by nemuselo být jen skrývání přes JS, ale také skrývání přes CSS – nebo ne? Opravte mne jestli se mýlím…
HTML:
<ul class=„menu“>
<li><a href=„error:permission_deny“></a></li>
<li><a href=„http://www.xyz.xyz“></a></li>
</ul>
CSS:
.menu a[href="error:permission_deny"] < li {display: none;}
Netestoval jsem to, ale určitě takto nebo podobně to půjde pořešit v CSS.
- Jakub Šulák
- Člen | 222
myslím, že nová jo, ale to je jedno – pokud tam bude JS a CSS také, tak to pokrývá 99,8% lidí (můj tip). Ten kdo si vypne JS kvůli bezpečnosti, má většinou aktuální prohlížeč. Takže zbyde pár uživatelů, kteří mají archaický prohlížeč, který vůbec JS neumí a i těm nepůjde na odkaz kliknout (ale zobrazí se).
Teď jde spíše o to, jak to implementovat.
- romansklenar
- Člen | 655
o5 napsal(a):
Jakub Šulák napsal(a):
Ten kdo si vypne JS kvůli bezpečnosti
… je debil a takove lidi smerovat na python.com!
Pročpak?
- David Grudl
- Nette Core | 8228
Možná by bylo vhodnější kombinovat s n:atributem:
<a href="{link ...}" n:if="$user->isAllowed(...)">Odkaz</a>
nebo
<a href="{link ...}" n:tag-if="$user->isAllowed(...)">Odkaz</a>
- pekelnik
- Člen | 462
Omlouvám se za menší off topic, ale jinak na to zase zapomenu :)
Dotaz na Davida: Již dlouho postrádám n-attribut href pro odkaz:
<?php
<a n:href="Admin:Dashboard: foo => 123">{_'Dashboard'}</a>
?>
Je to v plánu?
Ano znám: Nette Links (nette:) i makro {link} ale myslím že syntax n-atributů je velmi příjemná a je škoda ji nepoužít.
- Jakub Šulák
- Člen | 222
RE David:
To se mi moc nelíbí:
- pokud na aplikaci bude dělat více programátorů (vlastně i jeden), je velká pravděpodobnost, že to někde zapomenou dát
- pokud mám v aplikaci X stovek odkazů, musím to řešit u každého – zbytečně zaplácaný kód
- kodéři co dělají front webu mi to tam dávat nebudou určitě :-)
- v6ak
- Člen | 206
Nedávno jsem nad tím taky přemýšlel. Bylo by zajímavé mít ke každé akci možnost přidat metodu typu isActionnameAllowed($args), která by zajistila ověření jak pro akci samotnou, tak pro odkazy (to vše na jednom místě). Jen je tu problém se striktností: stačí se překlepnout (probíráno u anotací). Dál jsou tu otázky praktického použití a praktické problémy. Příklad: Mám nějaké CRUDko, tedy mám jeden Presenter pro seznam a jeden pro každou položku. Na každé položce můžu vykonávat určité akce (nemusí být jen smazat a upravit) a na některé akce mám odkaz nebo tlačítko již přímo ze seznamu. Oprávnění může být založeno i na tom, zda jsem vlastníkem dané položky. Jak to vyřešit, aby se to nenačítalo zbytečně podruhé?