Oprávnění a role#
Systém kontroluje u každého požadavku, zda smí daná identita provést danou akci nad daným zdrojem.
Role#
| Role | Kdo |
|---|---|
guest |
nepřihlášený |
registrated |
přihlášený uživatel |
owner |
vlastník konkrétního záznamu |
admin |
administrátor |
Model je plochý#
Chybějící pravidlo znamená zamítnutí
Neexistuje dědičnost ani záložní pravidlo. Není-li pro kombinaci zdroje a akce záznam, akce se zamítne — i pro administrátora, dokud se pravidlo nedoplní.
Klíč pravidla má tvar:
Například :Api:Eshop:Order:updateColumns.
Co je veřejné#
Nepřihlášeným je otevřené hlavně čtení — články, stránky, číselníky, kategorie a produkty. Zápis je vždy za přihlášením.
Konkrétní seznam je v datech, ne v kódu
Která pravidla jsou otevřená, je nastavení konkrétní instalace. Zjistíte to
nejrychleji tak, že akci zavoláte bez tokenu — buď projde, nebo dostanete
Permission denied.
Vlastnictví#
Role owner sama o sobě nepovoluje nic. Vlastnictví se ověřuje dotazem do
databáze.
Vlastnictví se nikdy nebere z požadavku
Pošlete-li v datech vlastní identifikátor uživatele, systém ho ignoruje a při vkládání dosadí vlastníka ze serveru.
🔴 Vlastnictví nefunguje na kolekcích#
get-all, get-by a hromadné mazání jsou pro vlastníka vždy zamítnuté
Nelze říct „vrať mi moje záznamy“ obecným výpisem. Pro vlastní data existují zvláštní akce — ale řada z nich nemá HTTP obal a je tedy zvenčí nedostupná. Viz CRUD vzor.
Režimy#
| Režim | Chování |
|---|---|
off |
nekontroluje se |
log |
vyhodnotí a zapíše, nezamítá |
enforce |
zamítá — současný stav |
Vypínač platí pro celou větev API najednou
Neexistuje přepínač po modulech. Počítejte s tím, že se chování oprávnění může skokově změnit.
Zamítnutí#
s kódem HTTP 403.
Kód 400 znamená zamítnuté oprávnění, ne „chybný požadavek“
Číselné kódy se nápadně podobají stavovým kódům HTTP, ale neodpovídají jim. Viz Chybové kódy.
Volání zevnitř systému#
Web a administrace volají tytéž zdroje vnitřní cestou — bez HTTP, přímým sestavením požadavku. Kontrolu oprávnění to ale neobchází: obě cesty procházejí týmž guardem a mají jen samostatný přepínač.
Pro vás jako externího klienta z toho plyne jedno
Chování, které vidíte na webu, nemusí být přes API dostupné — ne proto, že by web kontrolu obcházel, ale proto, že řada akcí nemá HTTP obal. Viz CRUD vzor.
Rozdíl mezi webem a API tedy není v oprávněních, ale v dostupnosti akcí
Nefunguje-li přes API něco, co web umí, hledejte chybějící endpoint nebo chybějící pravidlo — ne „výjimku pro web“.