Dostupné některé stránky pouze po přihlášení

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

Zdravím vespolek. Mám opět jeden dotázek :) Chtěl bych pár stránek na webu udělat dostupnými pouze po přihlášení uživatele. Zatím to mám tak, že po přihlášení se do @layout.latte přidá další menu. To funguje parádně. Horší už to je s tím, že když sem nepřihlášený a znám odkaz na tyto stránky, tak se na ně v pohodě dostanu ručním zadáním odkazu do adresního řádku prohlížeče. Studoval sem návod při použití „Modules-Usage“, ale nějak sem ho nepobral… :(
Jde o stránky na kterých se provádí určité operace (přidaní textu, editace současného příspěvku…) To sem provizorně ošetřil tím, že i když se někdo na tyto „zakázané stránky“ dostane a bude chtít něco změnit/smazat, vypíše se mu neúspěch. Jde nějak přímo zakázat přístup na tyto stránky, aby se nezobrazily když není někdo přihlášen, ale zadá je „natvrdo“?

Jinak myslím že to částečně souvisí s routry, jak sem se dočetl. Jelikož mi na locahlostu nefungují .htaccess používám simplerouter

use Nette\Application\Routers\SimpleRouter;
$container->router = new SimpleRouter('Homepage:default');

Napadlo mě vytvořit pole, které by obsahovalo tyto „zakázané“ stránky a ověřovat jestli je uživatel přihlášený nebo ne a podle toho buď stránku zobrazit a nebo vypsat, že tam nemá přístup… Ale nějak mě nenapadá jak to zprovoznit… :-/
Díky za případné nakopnutí… :)

RDPanek
Člen | 189
+
0
-

Procti toto: https://doc.nette.org/…thentication pote v presenteru, kam nechces aby se uzivatel dostal k dane akci, over, zda-li ma dostatecna prava.

Rellik
Člen | 104
+
0
-

Jo to mám:

{if $user->loggedIn}
                <span class="right">{$task->date|date:'j. n. Y'}
                    <a href="{link EditAktuality:default id=>$task->id}">EDITOVAT</a> |
                    <a href="{link delete! $task->id}" onclick="return confirm('Smazat???')">SMAZAT</a>
                </span>
                {else}
                <span class="right">{$task->date|date:'j. n. Y'}</span>
                {/if}

Ale chtěl sem aby se nu stránku vůbec nedostal… i když teď mě napadá, že tak tu dotyčnou stránku můžu zakázat celou… :)

22
Člen | 1478
+
0
-

asi zační číst tohle a pak tohle vlákno napřed…, a na závěr ACL

Edit: to jsou věci, které musíš řešit v presenteru.. napřed projdi všechny dostupné informace a pak se ptej.

Editoval 22 (14. 1. 2012 19:18)

spidy
Člen | 55
+
0
-

Ty práva nesmíš testovat jen při vypisování odkazů, ale i v té akci EditAktuality:default a v handleDelete.

Rellik
Člen | 104
+
0
-

spidy: jo to tak mám…
Teď sem to pořešil podle návodů z odkazů od 22 tím, že sem do všech „zakázaných“ stránek přidal navíc ověření přihlášení:

public function startup() {
        parent::startup();
        if (!$this->getUser()->loggedIn) {
            $this->flashMessage('Přihlašte se, prosím.');
            $this->redirect('Sign:default');
        }
    }

Což už je myslím dostačující ochrana… :)

PavelJurasek
Člen | 39
+
0
-

A teď by mohlo být posledním krokem ještě vytvořit rodiče (třeba SecuredPresenter) všech zabezpečených presenterů a řešit to pouze v něm. A nebudeš muset mít v každém presenteru duplicitní kód.