Nastavení práv a jejich kontrola – Nette v2.0
- Prochy
- Člen | 91
Zdravim, potřeboval bych trochu poradit s nastavením práv v Nette. Přihlášení mám vyřešený a pak práva nastavim následně:
protected $acl;
protected function startup() {
parent::startup();
$this->acl=new Nette\Security\Permission();
$this->acl->addRole('therapist');
$this->acl->addRole('admin','therapist');
$this->acl->addResource('settingsPage');
$this->acl->allow('admin','settingsPage','view');
}
Potom dejme tomu na stránce v presentru kde se pak používá ten settingsPage mám:
protected function startup(){
parent::startup();
$role=($this->getUser()->getRoles());
if(!$this->acl->isAllowed($role,'admin','view')){
$this->redirect('Homepage:') ;}
}
Ale nevim, jak správně dosadit do té podmínky tu roli právě
přihlášeného uživatele. A pokud by byla hodnota FALSE, tak přesměrovat
pryč. Nebo jestli bych ty práva měl nastavovat jinde? Zrovna v tomhle si
nejsem tak jistej, tak bych potřeboval poradit.
Díky za odpovědi
- bojovyletoun
- Člen | 667
Tohle nemůže fungovat. Do proměnná $role přiřazuješ pole Nette\Security\User::getRoles().
A Metoda Nette\Security\Permission::isAllowed()
přijímá v 1. arg jen string/null/IRole.
Takže správně je použív Nette\Security\User::isAllowed() –
on už si role projde.
- llook
- Člen | 407
Implementuj si IAuthorizator a regni ho jako službu:
class MyAuthorizator implements Nette\Security\IAuthorizator
/**
* @var Nette\Security\Permission
*/
private $acl;
public function __construct()
{
$this->acl = new Nette\Security\Permission();
$this->acl->addRole('therapist');
$this->acl->addRole('admin','therapist');
$this->acl->addResource('settingsPage');
$this->acl->allow('admin','settingsPage','view');
}
function isAllowed($role, $resource, $privilege)
{
return $this->acl->isAllowed($role, $resource, $privilege);
}
}
config.neon:
services:
authorizator: MyAuthorizator
A potom používej $user->isAllowed($resource, $action)
.
User si ten autorizátor získá ze service locatoru přes getByType (viz)
a zavolá na něm isAllowed postupně pro všechny svoje role (viz).