- SessionGuard resolves Supabase JWT (local HS256 verify, GoTrue fallback) and loads the tenant membership from x-tenant-id; TenantGuard keeps deny-by-default and rejects client-supplied tenant_id (blueprint 11.3). - New bootstrap routes: GET /v1/me, POST/GET /v1/tenants, tenant member management (list/add/remove) with owner/admin RBAC. - Organizations and Tasks modules: full CRUD scoped to session.tenantId, soft delete, audit log + outbox events on every write. - AuditService (global) for blueprint 3.4 "100% audit on material ops". - jest + tenant.guard.spec covering deny-by-default and anti-IDOR cases.
2 lines
No EOL
232 B
SQL
2 lines
No EOL
232 B
SQL
CREATE UNIQUE INDEX IF NOT EXISTS "memberships_tenant_user_uq" ON "memberships" USING btree ("tenant_id","user_id");--> statement-breakpoint
|
|
CREATE INDEX IF NOT EXISTS "memberships_user_idx" ON "memberships" USING btree ("user_id"); |