Jak je to s isAllowed()?

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

Zdravím,
chcel by som sa opýtať ako vlastne pracuje metóda isAllowed() objektu Premission.

V dokumentácii https://doc.nette.org/…thentication je napísané, že sa používa

$user->isAllowed($resource, $privilege);

keď to však chcem použiť ja, tak to po mne stále chce rolu. Rolu mám samozrejme nastavenú v Identity, a po zavolaní Environment::getUser()->Identity->getRoles() sa mi korektne vypíše napríklad

array(1) {
   0 => string(7) "teacher"
}

A tu mi vyhadzuje výnimku InvalidStateException: Role 'profile' does not exist.

if (!$this->acl->isAllowed('profile', 'show_others')) {
	throw new BadRequestException('No premission to do this action.');
}

Ako teda vlastne mám použiť tú isAllowed()? Ďakujem!

vlki
Člen | 218
+
+1
-

Protože je to voláni isAllowed na různých objektech. Pokud metodu voláš na instanci Permission, tak musíš dodat i roli. Můžeš také, pro zjednodušení, volat isAllowed rovnou na instanci User.

Pokud chceš tedy volat na instanci třídy User, použij něco takového…

$user = Environment::getUser();
$user->isAllowed('resource', 'privilege');

V tomto případě ale musíš mít zaregistrovanou svou instanci třídy Permission jako službu Nette\Security\IAuthorizator.

RichardT
Člen | 43
+
0
-

hej to je presne ono! ja som tu isAllowed volal nad Environment::getService('Nette\Security\IAuthorizator') a nie nad Environment::getUser(), proste som v $user->isAllowed($resource, $privilege); stále videl $acl->isAllowed($resource, $privilege);,
Ďakujem pekne!