What it walks you through
About 15 minutes, start to punchline.
- Set up the API side — start the local backend, log in to APIblaze, create the proxy from the OpenAPI spec, open the tunnel to your machine, and prove a real request round-trips (the exact curl a storefront would send).
- Give ResiResi its Developers page — mint one limited admin key (it stays on the server), make Nino's owner the tenant admin, then start ResiResi's app: the pane opens it already signed in as that owner, and you watch the two widgets replace their placeholders, live and ready to use.
- BEFORE — Nino's storefront comes up on your proxy, and John (a regular diner) opens Maria's reservation. HTTP 200. Not right.
- Fix it in one sentence — put maria in a
reservationistsgroup (click it in the widget or let the lab run the commands), then one command turns plain English into enforced authorization:
npx apiblaze rule "Bookings belong to whoever makes them. A reservation may be opened by its owner or by members of the existing group \"reservationists\". The full reservations list is for \"reservationists\" only. Leave every other route open." <your-proxy> --enforce- AFTER — four calls tell the story: John books a table (201, the proxy records him as the owner) · John opens his own (200) · John tries Maria's (403) · Maria, staff, opens John's (200). Same API key on every call — the person now decides the result.
- And in the UI — the storefront pane parks both diners on the same booking of Maria's, so clicking between John and Maria flips one page between a friendly “this isn't yours to view” and the booking itself. Same URL, same API key; only the person changed. John's own booking still opens, one link away.