Seznam všech rolí ze statického ACL

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

Jak získat nebo se dostat k

getRoles()

1. Potřebuji získat seznam všech rolí z

class AuthorizatorFactory {

    /**
     * @return \Nette\Security\IAuthorizator
     */
    public function create() {
        $permission = new Permission();

        /* seznam uživatelských rolí */
        $permission->addRole('guest'); // Defaulr user for cleared session exception
        $permission->addRole('user');
        $permission->addRole('admin');

        /* seznam zdrojů */
        $permission->addResource('Homepage');
        $permission->addResource('Setup');

        /* seznam pravidel oprávnění */
        $permission->allow('user', array('Homepage'), 'list');
        //...

        /* admin má práva na všechno */
        $permission->allow('admin', Permission::ALL, Permission::ALL);

        return $permission;
    }
}

V config neon mám

authorizatorFactory: App\Model\AuthorizatorFactory
        authorizator: @authorizatorFactory::create

PS: role k přihlášenému uživateli dostanu bez problémů

2. Mohu do isAllowed posílat array ? nebo jen string ?

Editoval Joacim (15. 5. 2015 23:37)

enumag
Člen | 2118
+
+2
-
  1. Injectni si authorizator, Permission má metodu getRoles(), která ti vrátí všechny existující role.
  2. Jen string, případně jako resource můžeš předat objekt typu Nette\Security\IResource.
Joacim
Člen | 229
+
0
-

1. Injecnout IAuthorizator tímto způsobem do mojí třídy AutorizatorFactory pomocí konstruktoru ? nebo jsem to pochopil špatně ?
https://doc.nette.org/…dependencies

Jelikož se inicializuje přes config.neon a tak mě to trošku mate

Editoval Joacim (16. 5. 2015 13:56)

enumag
Člen | 2118
+
0
-

Injectni autorizátor tam kde ty role potřebuješ. Do AuthorizatorFactory samozřejmě ne – tam ten autorizátor vytváříš.

Joacim
Člen | 229
+
0
-

Takže service (authorizator) z config.neon mám předat do konstruktoru mojí třídy ?

class TestPresenter extends BasePresenter {

    /** @var authorizator */
    private $authorizator;

    public function __construct(authorizator $service) {
        $this->authorizator = $service;
    }

    public function renderDefault() {
        $this->template->roles = $this->authorizator->getRoles();
    }
}

Je to špatně, ale nevím jak to udělat jelikož jsem asi nepochopil systém DI

Ve třídě Authorizator factory mám jen metodu create a mám ji nastavenou v config.neon

Editoval Joacim (16. 5. 2015 18:32)

Unlink
Člen | 298
+
0
-

Skus takto

public function __construct(\Nette\Security\IAuthorizator $authorizator) {
    $this->authorizator = $authorizator;
}
Joacim
Člen | 229
+
0
-

@Unlink Díky moc už to funguje, jak jsem chtěl.