Lze testovat, jestli má role nad zdrojem jakékoliv oprávnění (ANY, nikoliv ALL)
- Šaman
- Člen | 2659
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
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 | 2659
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)