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
+
0
-

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)