Ako správne na statické ACL

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

Zdravím,

zaujímalo by ma ako na vytvorenie statického ACL. Hľadal som aj tu na fóre a však sú už niekoľko rokov staré a tutorialov z nette veľa nie je a dokumentácia bohužiaľ stojí za nič.

Ďakujem

Pavel Janda
Člen | 977
+
+2
-

@iGavrilo Tak to jsi nehledal pořádně.
Třeba:
https://play.nette.org/…i-acl-vrstvy

Nebo myslíš, že i toto stojí za nic? To bych nerad..

Editoval Pavel Janda (2. 3. 2016 13:44)

David Matějka
Moderator | 6445
+
+1
-

@PavelJanda tohle je zneuzivani dedicnosti

nejlepsi je napsat si factory https://forum.nette.org/…zace-pouziti#…

v dokumentaci to bohuzel zatim neni, ale je pripraven pull request. jestli se v tom nezformatovanym vyznas, tak ti to taky pomuze :) https://github.com/…ll/388/files

Pavel Janda
Člen | 977
+
+3
-

@DavidMatějka Good point. Upravil jsem tutorial.

iGavrilo
Člen | 32
+
0
-

@PavelJanda Od kedy si to editoval hodilo mi to error Type of service ‚factory‘ is unknown.

Môj config

services:
            - App\Model\SlidersManager
            - App\Model\ServersManager
            - App\Model\NewsManager
            - App\Model\ForumManager
            - App\Security\AuthorizatorFactory
            class: Nette\Security\Permission
            create: @App\Security\AuthorizatorFactory::create
            router: App\RouterFactory::createRouter # Nastavení routeru aplikace.
            authenticator: App\Model\UserManager # Nastavení přihlašování do aplikace.
David Matějka
Moderator | 6445
+
+2
-

mas to tam spatne odsazene a chybi ti tam odrazka.

services:
            - App\Model\SlidersManager
            - App\Model\ServersManager
            - App\Model\NewsManager
            - App\Model\ForumManager
            - App\Security\AuthorizatorFactory
            -
                        class: Nette\Security\Permission
                        create: @App\Security\AuthorizatorFactory::create
            router: App\RouterFactory::createRouter # Nastavení routeru aplikace.
            authenticator: App\Model\UserManager # Nastavení přihlašování do aplikace.

to class a factory jsou option jedne anonymni sluzby

Radek Pašta
Člen | 8
+
+1
-

Zdravím,
musím pochválit tutoriál Nasazení ACL vrstvy od @PavelJanda

Při osahání tutoriálu jsem narazil na pár drobností, které by chtělo upravit pro ostatní. Doufám, že to nebylo mou nepozorností. Tak mě snad autor neukamenuje…

Třída AuthorizatorFactory

// Kořenový zdroj "Profile" neexistuje
$acl->addResource('User:Profile', 'Profile');  -->>  $acl->addResource('User:Profile', 'User');

Třída SignPresenter

// Třídu Acl jsme nevytvářeli
use App\Security\Acl;  -->>  use App\Security\AuthorizatorFactory;

// a následně úprava zpracování formuláře
$identity = new Nette\Security\Identity(1, Acl::ROLE_USER, $data);  -->  $identity = new Nette\Security\Identity(1, AuthorizatorFactory::ROLE_USER, $data);

Nakonec někam zmínku, na vytvoření šablony app/presenters/templates/Profile/default. Když není, vyskočí Tracy.
Snad vše na co jsem v tutoriálu narazil

Pavel Janda
Člen | 977
+
+1
-

@RadekPašta Děkuji za doplnění. Jak občas něco upravím, tak to neprocházím… chyba. Napravím.

Burrag
Nette Blogger | 3
+
0
-

ahoj,
mohl bych se zeptat jak vypada ta metoda checkRequirements() v tutorialu Nasazeni ACL vrstvy, aby resila ty privilegia ?
Dekuji

Editoval Burrag (25. 3. 2016 15:49)

emmil
Člen | 26
+
+1
-

@PavelJanda Nemohl jsem si odpoustit velkou pochvalu za skvělý tutoriál! Dneska jsem něco podobného asi 3 hodiny hledal a nemohl jsem najít (na googlu). Pak příjdu na forum a chystám se vytvořit nový topic (ale pro jistotu ještě letmě profrčím topicy) a hned třetí topic a má v sobě tak luxusní tutoriál. Proč na tenhle tutoriál není odkaz v dokumentaci access-control ? Myslím, že by to hodně věcí objasnilo. Dokumentace je sice moc hezky napsaná ale když chce člověk vidět kde má všechny ty snippety rozházet po aplikaci, tak tenhle tutoriál to krásně ukáže.

EDIT:

Jedna věc mi ale nejde do hlavy, proč nemohu v configu udělat něco takového:

authorizator: App\Model\Security\AuthorizatorFactory::create()

a v továrně methodu create udělat jako statickou?

Editoval emmil (22. 4. 2016 11:21)

Pavel Janda
Člen | 977
+
+2
-

@emmil Dík za pochvalu.

Tak určitě to jde. Ale při použití statiky by ti například DIC nepředal případné závislosti v konstruktoru (databáze, …) a podobně.

emmil
Člen | 26
+
+1
-

@PavelJanda Díky za odpověď. Abych pravdu řekl, tak z dokumentace bych asi nepochopil, že by se to mělo v configu napsat zrovna tak, jak nastiňuješ v tutoriálu (a že kdybych to takhle nenapsal a použil statickou metodu, tak bych narazil na problémy, které zmiňuješ). Pro referenci jenom uvádím kód, o kterém se bavíme.

services:
    ...
    - App\Security\AuthorizatorFactory
    -
        class: Nette\Security\Permission
        create: @App\Security\AuthorizatorFactory::create