Show me how the permissions work.
There are four roles — consumer, owner, staff and admin — and they answer two different questions. Authentication asks whether I know who you are; authorization asks whether this particular row is yours. Conflating them is how a panel ends up showing one operator another operator's orders.
So the check happens twice, at different depths. The application decides what to render and which endpoints to expose. The database decides what may be read at all: Row Level Security policies in PostgreSQL sit under the queries, keyed to the authenticated user, so a request that slips past the application layer still returns nothing. A 401 means I do not know you. A 403 means I know you and the answer is still no.

