Nette 2.1 ACL – jak nastavit authorizator
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- motorcb
- Člen | 552
Zdravim.
Do presenteru jsem si umístil tento kód:
public function actionDefault()
{
$acl = new Nette\Security\Permission;
// definujeme role
$acl->addRole('guest');
$acl->addRole('registered', 'guest'); // registered dědí od guest
$acl->addRole('administrator', 'registered'); // a od něj dědí administrator
//zdroje
$acl->addResource('league');
// nechť guest může prohlížet ligy
$acl->allow('guest', 'league', 'view');
// registrovaný muze editovat ligy
$acl->allow('registered', 'league', 'edit');
// administrátor může prohlížet a editovat cokoliv
$acl->allow('administrator', Nette\Security\Permission::ALL, array('view', 'edit'));
dump( $acl->isAllowed( 'registered', 'league', 'edit' ) );
}
To mi funguje :-) S načtením stránky se mi vydumpuje TRUE
Ale jak na to v latte?
Pokud jsem admin, chci mít možnost příspěvek editovat: default.latte:
{if $user->isAllowed("league", "edit")}
<a href="">mám právo editovat lidu</a>
{/if}
ovšem Nette končí chybou:
Nette\InvalidStateException
Authorizator has not been set.
Jak nastavit authorizator? Děkuji za rady a nápady
- Michal Vyšinský
- Člen | 608
Pokud se nepletu, tak se isAllowed volá přímo na objekt uživatele, takže role tam vkládat nepotřebuješ. Zadáš jen resource a privilege a Nette se ti o to už postará.