RLS는 workspace_id 기준 (user_id 단독 금지)
RLS는 workspace_id 기준
한 줄 정의
Multi-tenant 앱에서 RLS(Row Level Security)는 user_id 단독이 아닌 tenant_id(workspace_id) 기준으로 설계해야 한다.
핵심 내용
왜 user_id 단독이 위험한가:
- 멤버가 workspace를 떠나면 user_id로 걸린 데이터가 **고아(orphan)**됨
- workspace_id 기준이면 멤버 이탈과 무관하게 데이터 소유권 유지
-- ✅ workspace_id 기준
WHERE workspace_id = auth.jwt()->>'workspace_id'
-- ❌ user_id 단독 (고아 데이터 위험)
WHERE created_by = auth.uid()
예외:
- workspace_members 테이블 자체 (user_id가 PK의 일부)
- 개인 설정 (notification_preferences 등) — workspace와 무관한 데이터
적용 맥락
Supabase/PostgreSQL RLS를 사용하는 모든 multi-tenant SaaS. workspace_id = tenant_id 역할.
Relationships
derived_from Workspace Tenant 모델 (Lattice)