Nastaveni ACL deny + allow
- balicekt
- Člen | 52
Dobry den,
resim nastaveni ACL v configu mam toto:
- allow([guest], Admin:Settings, Nette\Security\Permission::ALL)
vysledek
$acl->isAllowed(‚Admin:Settings‘) ⇒ TRUE
$acl->isAllowed(‚Admin:Settings‘, ‚yyy‘) ⇒ TRUE
Pokud to zmenima na:
- allow([guest], Admin:Settings, Nette\Security\Permission::ALL)
- deny ([guest], Admin:Settings, [xxx])
vysledek:
$acl->isAllowed(‚Admin:Settings‘) ⇒ FALSE
$acl->isAllowed(‚Admin:Settings‘, ‚xxx‘) ⇒ FALSE
Proc kdyz dam deny pouze pro xxx mam najednou vsechno v resource Admin:Settings na false?
Dekuji za rady.
- David Matějka
- Moderator | 6445
Ahoj, nahlédnutí na signaturu té metody ti to vysvětlí:
public function isAllowed($resource = IAuthorizator::ALL, $privilege = IAuthorizator::ALL): bool
- David Matějka
- Moderator | 6445
vsechny nejsou deny, ale vsechny nejsou povoleny. ty se ptas „je povolen pristup pro resource "Admin:Settings“ a vsechny jeho opravneni?" a jelikoz neni povolen pro vsechny, tak to vrati false
- FilipDolezal
- Člen | 9
@DavidMatějka Pochopil jsem důvod, proč to tak je, ale přijde mi, že v dokumentaci je to napsané naopak.
if ($user->isAllowed('file')) { // může uživatel dělat cokoliv se zdrojem 'file'?
useFile();
}
if ($user->isAllowed('file', 'delete')) { // může nad zdrojem 'file' provést 'delete'?
deleteFile();
}
Oba parametry jsou volitelné, výchozí hodnota null
má
význam cokoliv.
Cokoli (cokoliv) patří mezi zájmena neurčitá, s jejichž pomocí vyjádříme libovolnost výběru z určitého množství. Může jít o jakoukoli (jakoukoliv) věc, nezáleží na tom, co to bude.
Pochopil jsem z toho, že stačí, aby role měla přístup alespoň
k jedné permission.
Chtěl bych se zeptat, jestli by to šlo udělat tak, aby metoda isAllowed
vracela true, pokud má role přístup alespoň k jedné permission?
Děkuji.
- Marek Bartoš
- Nette Blogger | 1275
Mělo by tam být napsáno všechno, ne cokoli
Proč by ses ale ptal na alespoň jednu? Vždy se ptej na co nejkonkrétnější akci. Případně isAllowed(…)||isAllowed(…)