Lze testovat, jestli má role nad zdrojem jakékoliv oprávnění (ANY, nikoliv ALL)

Šaman
Člen | 2666
+
0
-

Ahoj, v nějaké defaultní metodě API BasePresenteru bych potřeboval zjistit, jestli daný uživatel má nad zdrojem jakékoliv oprávnění. Jde o to, že pak teprve parsuji query a řeším konkrétní endpoint, na který uživatele pošlu a ten si pak přesná oprávnění už řeší sám. Ale rád bych odfiltroval požadavky, které nemají vůbec žádná práva na daný resource.

$this->acl->isAllowed($this->role, $resource);

Tohle mi otestuje, jestli má role všechna práva (IAuthorizator:ALL), ale já bych potřeboval test na ANY. Lze to nějak, pokud předem neznám všechna možná oprávnění (list, get, search, delete, fooBar)?

Polki
Člen | 553
+
0
-

Nevím o tom. Každopádně bych to obešel třeba tak, že kdykoliv někomu nastavuji jakékoliv právo, tak bych mu nastavil i právo ANY.

Tedy:
$this->acl->allow($this->role, $resource, „ANY“);
$this->acl->allow($this->role, $resource, „other“);

No a pak se budeš ptát vždy na $this->acl->isAllowed($this->role, $resource, „ANY“); protože víš, že ti, kteří mají alespoň jednu jinou mají určitě nastavenou i ANY

Šlo by to?

EDIT 1:
Nebo si vytvoř vlastní imlementaci IAuthorizator a dej si tam funkci co to umí.

Editoval Polki (3. 9. 2020 14:19)

Šaman
Člen | 2666
+
0
-

Tu první možnost už používám, ale chtěl jsem se jí zbavit.

Polki
Člen | 553
+
0
-

Šaman napsal(a):

Tu první možnost už používám, ale chtěl jsem se jí zbavit.

V tom případě ti moc neporadím. Leda by si tuhle logiku přesunul do té vlastní implementace toho IAuthorizatoru, který třeba může dědit od originálního.

Možná ti však poradí někdo zkušenější.

Šaman
Člen | 2666
+
+1
-

Díky, uvidím jestli to už někdo řešil, obejit se dá. Vlastně mě k tomu přivedla dokumentace

if ($user->isAllowed('file')) { // může uživatel dělat cokoliv se zdrojem 'file'?
	useFile();
}

Chápal jsem to chvíli tak, že „může uživatel dělat něco se zdrojem? (Má nějaká práva?)“ Ale ono je to „může dělat uživatel všecko? (Má neomezená práva?)“

Editoval Šaman (3. 9. 2020 14:42)