Nette\Security\Permission – getRoleParents() chování
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- GEpic
- Člen | 566
Ahoj,
pokud mám:
services:
authorizator:
class: Nette\Security\Permission
setup:
- addRole('guest')
- addRole('registered', 'guest')
- addRole('administrator', 'registered')
a poté použiji getRoleParents()
, dostanu:
$acl->getRoleParents('administrator'); // array('registered')
namísto v dokumentaci uvedeného:
$acl->getRoleParents('administrator'); // array('guest', 'registered')
dle hledání na fóru jde ale nejspíš o chybu v dokumentaci.
EDIT:
Dostat výsledek jako v dokumentaci je dle addRole()
možné takto:
services:
authorizator:
class: Nette\Security\Permission
setup:
- addRole('guest')
- addRole('registered', 'guest')
- addRole('administrator', ['registered', 'guest'])
EDIT2:
Je možné podědit (NENÍ, protože private $roles
) si Permission
a upravit getRoleParents()
takto:
public function getRoleParents($role)
{
$this->checkRole($role);
$roles = array_keys($this->roles[$role]['parents']);
foreach ($roles as $parent) {
if (!empty($this->roles[$parent]['parents'])) {
$roles = array_merge($roles, $this->getRoleParents($parent));
}
}
return $roles;
}
Poté je již funkční jako uvedeno v dokumentaci.
Nette již hlídá existující / neexistující role, tudíž není možné to zacyklit.
Nějaké tipy?
Editoval GEpic (20. 2. 2017 22:39)