Nastavení ACL skrz config.neon a změna pořadí parametrů u funkce isAllowed
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- buffus
- Člen | 101
Ahoj, v čistém nette/web-project
(Nette 2.3.4) si hraji
v HomepagePresenteru:
<?php
namespace App\Presenters;
use Nette;
class HomepagePresenter extends Nette\Application\UI\Presenter
{
public function renderDefault()
{
$acl = new Nette\Security\Permission;
$acl->addRole('guest');
$acl->addResource('article');
$acl->allow('guest', 'article');
dump($acl->isAllowed('guest', 'article'));
// vrací TRUE
// Zakomentuji dump výše a v následujícím
// prohodím pořadí 'guest' a 'article':
// dump($acl->isAllowed('article', 'guest'));
// Vyhodí se výjimka Nette\InvalidStateException
// Role 'article' does not exist. Tomu rozumím.
}
}
?>
Vrátím nette/web-project
do původního stavu a zkusím
nastavit ACL skrz config.neon
. Přidám:
services:
router: App\RouterFactory::createRouter
authorizator:
class: Nette\Security\Permission
setup:
- addRole('guest')
- addResource('article')
- allow('guest', 'article')
a opět upravuji HomepagePresenter:
<?php
namespace App\Presenters;
use Nette;
class HomepagePresenter extends Nette\Application\UI\Presenter
{
public function renderDefault()
{
// Př.1
// Tohle nechápu. Při pořadí 'role', 'zdroj':
dump($this->user->isAllowed( 'guest', 'article'));
// se vyhodí:
// Nette\InvalidStateException
// Resource 'guest' does not exist.
// Nemělo by se vrátit TRUE?
// Př. 2
// Zakomentuji dump výše.
// Při pořadí 'zdroj', 'role':
// dump($this->user->isAllowed('article', 'guest'));
// Se vrátí TRUE.
// Neměla by se tady vrátit výjimka
// Nette\InvalidStateException
// Role 'article' does not exist.
}
}
?>
V konfigurátoru se generuje
<?php
/**
* @return Nette\Security\Permission
*/
public function createServiceAuthorizator()
{
$service = new Nette\Security\Permission;
$service->addRole('guest');
$service->addResource('article');
$service->allow('guest', 'article');
return $service;
}
?>
Jsou ty parametry na výstupu funkce isAllowed
při konfiguraci skrz config.neon
přehozené nebo mi něco uniká?
Předem díky za odpověď.
Editoval buffus (9. 8. 2015 1:07)
- David Matějka
- Moderator | 6445
tady nejde o to, jak to konfigurujes, ale nad cim volas isAllowed. v prvnim pripade nad authorizatorem, ktery prijima jako prvni parametr roli. V druhem pripade to volas nad userem, ktery roli nevyzaduje, jelikoz zna roli aktualne prihlaseneho uzivatele a isAllowed pote deleguje na autorizator.