ACL remove resource za běhu
- Phalanx
- Člen | 310
Dobrý den,
chci se zeptat jak řešíte removeResource z ACL za běhu aplikace?
Netuším jak přistoupit za běhu k ACL. Jestli k tomu mám přistoupit např. ze Secured presenteru nějak tímto způsobem
<?php
$this->user->authorizator-> ??
?>
nebo musím přistupovat přímo ve třídě My_Authorizator. Ale pak netuším jak tam injectnout třídu User – Circular reference detected for services: application.17, security.user, authorizator. Musím zjistit jestli je firma přihlášeného uživatele aktivní a v případě že ne, zobrazit mu pouze homepage.
Zjednodušil jsem Authorizator pro ukázku:
<?php
/**
* Class responsible for authorizing members and controlling access
* to application resources.
*/
class My_Authorizator extends Nette\Object implements Nette\Security\IAuthorizator
{
/** @var User */
// protected $user;
/**
* bohuzel nelze injectnout
* @param User $user
*/
/*public function __construct(
User $user
) {
$this->user = $user;
}*/
/**
* @param $role
* @param $resource
* @param $privilege
* @return bool
*/
function isAllowed($role, $resource, $privilege)
{
$acl = new Permission();
// User roles
$acl->addRole('login');
$acl->addRole('seller', 'login');
$acl->addRole('admin', 'seller');
// Application resources
$acl->addResource('homepage');
$acl->addResource('clients');
/**
* options [ read, add, edit, delete ]
*/
// login
$acl->allow('login', 'homepage', array('read'));
// seller
$acl->allow('seller', 'clients', array('read', 'add', 'edit'));
// admin
$acl->allow('admin', Permission::ALL, Permission::ALL);
return $acl->isAllowed($role, $resource, $privilege);
}
}
?>
Děkuji
- David Matějka
- Moderator | 6445
Mas to reseny pomerne nestastne, radeji si na authorizator udelej factory (hledej na foru AuthorizatorFactory)
- Phalanx
- Člen | 310
Díky Davide, vycházel jsem z dokumentace https://doc.nette.org/…thentication
Kdykoliv za běhu aplikace můžeme i odebrat roli metodou removeRole(), zdroj odebere removeResource(), pravidlo removeAllow() nebo removeDeny().
Takže jsem očekával, že to mám úplně blbě a existuje mnohem jednodušší řešení než Factory s nutností odstranění cyklické závislosti.
https://forum.nette.org/…zace-pouziti#…
https://forum.nette.org/…ho-uzivatele