aplink – vlastní makro na odkazy s autorizací

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

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

o5
Člen | 416
+
0
-

Mohu takovou technickou? Co to umi (ma umet) ta {aplink}…Zajimalo by me, jak to v ty sablone vypada, respektive co zobrazujes, kdyz zjistis ze user nema opravneni…

Jakub Šulák
Člen | 222
+
0
-

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="")…

o5
Člen | 416
+
0
-

hehe, no prave to jsem myslel, protoze si chtel udelat makro ktery ti bude vracet link…

jedine aby {aplink} vracel i html, tedy <a href=„?edit“>edit</a>

Jakub Šulák
Člen | 222
+
0
-

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ý.

HonzaMac
Člen | 40
+
0
-

Zrovna včera jsem nad tím přemýšlel. Jak by bylo pěkné, kdyby odkazy na ,,nepřístupný'' obsah měly třeba taky červenou barvu, jako odkazy na neexistující stránky :-)

Ale pak mě zase napadlo, jestli to má nějaký význam … leda když by bylo to skrývání přes JS.

Jakub Šulák
Člen | 222
+
0
-

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.

redhead
Člen | 1313
+
0
-

ty podmínky v [] myslím nezvládájí IEčka

Editoval redhead (3. 11. 2009 15:40)

Jakub Šulák
Člen | 222
+
0
-

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.

o5
Člen | 416
+
0
-

Jakub Šulák napsal(a):

Ten kdo si vypne JS kvůli bezpečnosti

… je debil a takove lidi smerovat na python.com!

romansklenar
Člen | 655
+
0
-

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?

Jakub Šulák
Člen | 222
+
0
-

nerad bych odcházel od tématu a řešil flame.

David Grudl
Nette Core | 8150
+
0
-

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
+
0
-

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
+
0
-

RE David:
To se mi moc nelíbí:

  1. pokud na aplikaci bude dělat více programátorů (vlastně i jeden), je velká pravděpodobnost, že to někde zapomenou dát
  2. pokud mám v aplikaci X stovek odkazů, musím to řešit u každého – zbytečně zaplácaný kód
  3. kodéři co dělají front webu mi to tam dávat nebudou určitě :-)
v6ak
Člen | 206
+
0
-

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é?