작업 설명
docs/rbac_permission_matrix.md에 정의된 RBAC Permission Matrix를 기준으로 권한 판정 비즈니스 로직을 구현한다.
현재 RBAC 구조는 User에게 직접 권한을 부여하지 않고, User가 속한 Team을 통해 리소스 권한을 판단한다. Team은 Organization 안에서 role/tag처럼 동작하며, 실제 리소스 권한은 Team별 permission row와 auth_state로 결정한다.
상세 작업
auth_state 우선순위 정의
none = 0
read = 1
execute = 2
write = 3
manage = 4
admin = 5
- Organization membership 판정 로직 구현
- 별도 Organization membership 테이블을 사용하지 않는다.
- `team_memberships`를 Organization membership의 source of truth로 사용한다.
- User가 Organization 안에서 속한 active Team 목록을 조회한다.
- 공통 권한 판정 흐름 구현
- 요청 User 식별
- 요청 Organization context 결정
- User의 Organization 내 Team 목록 조회
- 요청 리소스에 연결된 Team permission row 조회
- User Team과 permission Team의 교집합 확인
- active Team만 인정
- 가장 높은 `auth_state` 선택
- required auth_state 이상인지 검증
- 리소스 Organization scope 검증
- 리소스별 permission table 기반 판정 구현
- Workflow: `team_workflow_permissions`
- KnowledgeBase: `team_knowledge_permissions`
- LLM Credential: `team_llm_permissions`
- Audit: `team_audit_permissions`
- Organization / Team 관리 정책 구현
- Organization 권한은 별도 permission table 없이 기본 Team 이름 기반 정책으로 판단한다.
- Team 관리 권한도 기본 Team 이름 기반 정책으로 판단한다.
- 기본 `member` Team은 삭제할 수 없도록 한다.
- Organization member는 최소 하나의 TeamMembership을 가져야 한다.
- 예외 정책 반영
- Public App 실행은 Team RBAC 대신 공개 설정과 secret 검증을 기준으로 처리한다.
- Webhook 실행은 session이 아닌 webhook secret 또는 deployment auth_secret으로 검증한다.
- Public/Webhook의 관리, 배포, 로그 조회에는 Workflow 권한을 적용한다.
- 실패 응답 정책 반영
- 인증 정보 없음: `401 authentication_required`
- Organization member 아님: `403 organization_membership_required`
- 리소스 권한 row 없음: `403 resource_permission_required`
- 권한 단계 부족: `403 insufficient_auth_state`
- 리소스 없음: `404 resource_not_found`
- 권한 때문에 숨겨야 하는 리소스: `404 resource_not_found`
참고 사항
- 기준 문서:
docs/rbac_permission_matrix.md
- 관련 문서:
docs/rbac_relationships.md
- 관련 문서:
docs/team_permission_db_design.md
- 관련 문서:
docs/team_workspace_plan.md
- 현재 구조에는 명시적 deny가 없으므로 allow 기반으로만 판단한다.
- 권한 row가 없으면
none으로 처리한다.
- User가 여러 Team에 속한 경우 가장 높은
auth_state를 최종 권한으로 사용한다.
작업 설명
docs/rbac_permission_matrix.md에 정의된 RBAC Permission Matrix를 기준으로 권한 판정 비즈니스 로직을 구현한다.현재 RBAC 구조는 User에게 직접 권한을 부여하지 않고, User가 속한 Team을 통해 리소스 권한을 판단한다. Team은 Organization 안에서 role/tag처럼 동작하며, 실제 리소스 권한은 Team별 permission row와
auth_state로 결정한다.상세 작업
auth_state우선순위 정의none = 0read = 1execute = 2write = 3manage = 4admin = 5참고 사항
docs/rbac_permission_matrix.mddocs/rbac_relationships.mddocs/team_permission_db_design.mddocs/team_workspace_plan.mdnone으로 처리한다.auth_state를 최종 권한으로 사용한다.