Jak řešíté kontrolu oprávnění?

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

Často se mi v metodách opakuje něco jako:

if (!Environment::getUser()->isAllowed($this->name, 'create')) {
    throw new InvalidStateException();
}

Nakonec jsem do potomka třídi User přidal metodu needAllowed($resource, $privilege) která v případě kdy uživatel nemá oprávnění vyhodí vyjimku, nebo to řešíte jinak?

phx
Člen | 651
+
0
-

Uvedeny kus kodu bych dal do predka presenteru, s tim, ze bych to volal s parametrem (asi) role (create). Nebo tento parametr by se bral z atributu potomka. Ci tak nejak.

Jmeno predpokladam je prihlaseny uzivatel. Pokud ne tak dalsi parametr.

Osobne role zatim neresim, ale mam tridu Admin_BasePresenter, ktera je potomky vsechn zabezpecenych presenteru a ve startup si hlida zda je uzivatel prihlasen ci nikoliv. Pote v samotnych presenterech nic dalsiho k tomu nepisu. Protoze v pripade chyby (neprihlasen) se presmeruje na prihlaseni. Je to v jednom z prikladu v Nette.

LM
Člen | 206
+
0
-

$this->name je název presenteru, u mě presenter = resource a view = privilege. Ale možná by šlo při startu presenteru udělat něco jako:

if (!Environment::getUser()->isAllowed($this->name, $this->view)) {
	throw new InvalidStateException();
}

a pak už se o to nestarat.

Editoval LM (13. 8. 2008 9:51)

phx
Člen | 651
+
0
-

Mozan bych zvolil lepsi pojmenovani: presenter = resource a view = privilege.
Neco jako allowedPresenter a allowedView.