auth-gate-alone-does-not-mean-authorization

Wrapping tRPC procedures with a protectedProcedure middleware (authentication) does not enforce authorization — any authenticated user can call any procedure on any resource. Row-level access control must be explicitly scoped: every query and mutation must filter by the caller’s userId/orgId, and role checks (admin vs member) must be enforced in the procedure body, not just at the route level. Schema-level role fields are useless unless the router actually reads them.