설계서: 역할/권한 모델에 deny, 우선순위, 충돌 해소 규칙 추가 (#466)
상태: Approved 작성: [AI] Architect · 최종수정: 2026-06-25 추적성 — Redmine: #466 · 관련 ADR: 없음 · 구현 파일:
cb_permission.permission_effect,PermissionService,PermissionMapper,cb_agent_doc_vpd_filter· 테스트: SQLcl27,mvn test
1. 목적
역할이 여러 개 붙은 사용자에게 allow 권한과 deny 권한이 동시에 존재할 때 최종 접근 범위를 명확히 계산한다.
2. 범위
- 포함: permission 단위
ALLOW/DENY효과 추가, deny 우선 VPD predicate 생성, UI 저장/목록 표시, 테스트. - 제외: role 자체 우선순위 숫자, 승인 workflow, rule별 deny.
3. 인수조건
cb_permission.permission_effect가ALLOW기본값으로 추가된다.- deny permission은 같은 object/action의 allow 결과에서 제외된다.
- deny
ALL이 있으면 최종 결과는1 = 0이다. - allow가 없으면 deny가 있어도
1 = 0이다. - UI에서 권한 효과를 선택하고 목록에서 확인할 수 있다.
4. 설계 결정
- 효과는
cb_permission단위로 둔다. 하나의 permission set이 allow인지 deny인지 명확히 구분한다. - 최종 predicate는
(<allow predicate>) AND NOT (<deny predicate>)이다. - allow
ALL은1 = 1, denyALL은 즉시1 = 0이다. - deny만 있고 allow가 없으면 whitelist 기본값에 따라
1 = 0이다.