Nastaveni ACL deny + allow

balicekt
Člen | 52
+
0
-

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
+
0
-

Ahoj, nahlédnutí na signaturu té metody ti to vysvětlí:

public function isAllowed($resource = IAuthorizator::ALL, $privilege = IAuthorizator::ALL): bool
balicekt
Člen | 52
+
0
-

Ahoj, dekuji za odpoved. Bohuzel tomu stale moc nerozumim. Kdyz mam deny pouze privilege xxx, tak proc jsou deny vsechny privilege? Popripade jak tohle resit kdyz mam 20 ruznych privilege a chci zakazat danemu uzivateli pouze 1 z nich?

David Matějka
Moderator | 6445
+
0
-

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

balicekt
Člen | 52
+
0
-

Dekuji za vysvetleni. Uz je to jasne jak to funguje.

FilipDolezal
Člen | 9
+
0
-

@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 | 1146
+
0
-

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(…)