ByteBite Docs
ArchitectureADRs

ADR-021: Dashboard operator restaurant context

Status: Accepted

Kontext

Das Dashboard hängt an einem eigenen Host (dashboard.bytebite.test / dashboard.staging.getbytebite.co), nicht an einem Restaurant-Hostname. Slice 2 braucht einen Operator-Kontext, damit Luigi-Menüs editierbar und von Mario isoliert bleiben. Better Auth (ADR-019) now requires a staff session for /dashboard/*; it still does not bind operators to a restaurant.

Entscheidung

Dashboard-Routen nutzen den Pfad /dashboard/restaurants/:restaurantId/... als Operator-Kontext. Unauthenticated /dashboard/* is 401. The path, not session.restaurantId, is still the tenant.

  • Hostname-Tenant-Lookup gilt nicht für /dashboard
  • Public Storefront bleibt ausschließlich hostname-basiert
  • Jede Mutation filtert restaurant_id aus dem Pfad; fremde UUIDs ergeben 404
  • Body-restaurantId darf den Pfad nicht überschreiben

Ein Restaurant-Wechsler in der Dashboard-UI speichert die Auswahl lokal. Staging-HTTPS (Storefront, Dashboard, API) liegt hinter Traefik BasicAuth. Das ersetzt kein Restaurant-Login: wer das Staging-Passwort hat, kann beide Seed-Restaurants editieren.

Konsequenzen

  • Slice 2 kann den DoD-Pfad Dashboard → Persistenz → Storefront ohne Auth erfüllen.
  • Das ist kein Production-Auth-Modell. Ein späterer Cutover ersetzt den Pfad-Kontext durch session.restaurantId. The session gate does not do that cutover — see Staff authentication.
  • Wer das Staging-BasicAuth-Passwort hat, kann beide Seed-Restaurants editieren. Tenant-Isolation bleibt eine API-/DB-Eigenschaft, keine Rollengrenze. Ein eingeloggter Staff-User darf in diesem Scaffold denselben Pfad treffen.

On this page