이 문서는 평가의 정확한 규칙을 설명합니다. 개념 입문은 핵심 개념을 참고하세요.
리소스 트리와 타입
리소스는 어떤 애플리케이션에 속하고 트리로 구성되며, 최대 15단계입니다. 타입이 어디에 둘 수 있는지를 결정합니다.
| 타입 | 허용되는 부모 |
|---|---|
| 모듈 | 최상위, 모듈 |
| 메뉴, 페이지 | 최상위, 모듈, 메뉴 |
| 탭 | 페이지, 탭 |
| 버튼 | 페이지, 탭 |
| API, 데이터 엔터티 | 최상위, 모듈 |
| 필드 | 데이터 엔터티 |
리소스 사이에 의존 관계를 선언할 수 있습니다. "필수"(리소스를 부여할 때 의존하는 리소스도 함께 부여)와 "선택"(관리자에게 알려주기만 하고 자동으로 부여하지 않음)입니다. 의존 관계는 순환할 수 없습니다. 콘솔의 페이지, 버튼과 그것들이 필요로 하는 API는 프론트엔드의 권한 매니페스트로 선언되며, 서버 시작 시 내장 리소스로 동기화됩니다.
권한 부여 도출
한 계정에 대해 평가기가 먼저 유효 역할을 결정합니다.
- 계정에 직접 배정된 역할;
- 계정이 속한 사용자 그룹, 부서("하위 부서 포함"인 상위 부서의 배정 포함), 그 사람이 맡은 직위에 배정된 역할;
- 현재 시각이 유효 기간 안에 있는 배정과, 활성화된 역할만 사용;
- 상속을 전개합니다. 한 역할의 모든 조상 역할(비활성화된 조상은 권한을 전달하지 않음).
이어서 이 역할들의 권한 부여를 병합합니다.
- 리소스를 허용하면 그 리소스 자체, 트리에서의 조상 리소스(보이게 하기 위해), 그리고 그것이 "필수"로 의존하는 리소스(재귀적으로)가 함께 허용됩니다.
- 리소스를 거부하면 그 리소스와 모든 하위 리소스에 적용되며, 어떤 허용보다 우선합니다.
- 비활성화된 리소스와 그 하위 리소스는 효력이 없습니다.
- 시스템 역할은 해당 모듈(예:
system,data,platform)의 전체 서브트리를 허용하는 것과 같습니다.
결과는 사용 가능한 리소스의 집합과, 그중 API 리소스에 대응하는 권한 코드입니다.
권한 남용 방지
- "허용"을 부여할 때 부여자 자신이 그 리소스를 사용할 수 있어야 합니다(시스템 역할을 가진 사람은 비즈니스 애플리케이션에 대해서는 이 제한을 받지 않습니다).
- 역할을 배정하거나 상속을 설정할 때 부여자는 그 역할이 각 애플리케이션에서 차지하는 모든 리소스를 자신도 가지고 있어야 합니다.
- 플랫폼 관리자 역할은 현재 보유한 사람만 배정, 수정하거나 제거할 수 있습니다.
- "거부"는 제한이 없습니다. 권한 부여 권한이 있는 사람은 누구나 권한을 줄일 수 있습니다.
데이터 규칙
데이터 정책은 역할에 속하며 "엔터티 × 동작 × 효과"로 범위를 정의합니다. ALL(플랫폼 테넌트 전용), TENANT, ORG_AND_CHILDREN, ORG, CUSTOM_ORGS, SELF, CONDITION. 데이터 행 하나가 사용 가능하려면 허용 규칙을 하나 이상 만족하고 어떤 거부 규칙도 만족하지 않아야 합니다.
조건은 구조화된 JSON이며 실행할 수 없고, 검증한 뒤에 저장합니다.
{ "and": [
{ "field": "status", "op": "eq", "value": "ACTIVE" },
{ "not": { "field": "orgUnitId", "op": "in", "value": { "var": "subject.orgUnitIds" } } }
] }변수는 subject.id, subject.username, subject.orgUnitIds, subject.groupCodes, subject.positionCodes, now뿐입니다. 비교 연산자는 필드 타입으로 제한되고, 중첩은 5단계와 노드 50개를 넘을 수 없습니다. 서버는 규칙을 JPA Specification으로 변환하고, SDK는 같은 의미로 비즈니스 애플리케이션 안에서 변환합니다.
필드 규칙
필드 정책은 읽기 방식(보임, 마스킹, 숨김)과 쓰기 방식(편집 가능, 읽기 전용)을 정합니다. 역할이 여러 개이면 가장 느슨한 설정을 사용하고, 설정이 전혀 없으면 필드는 완전히 열립니다. 읽기 규칙은 JSON 직렬화 시점에 적용됩니다(같은 DTO도 사람에 따라 다르게 보입니다). 쓰기 규칙은 서비스 계층에서 적용되며, 읽기 전용 필드를 수정하면 필드를 지목해 GF-FIELD-001을 반환합니다.
스냅샷과 버전
평가 결과는 권한 스냅샷입니다. 사용 가능한 리소스, 권한 코드, 데이터 규칙과 필드 규칙으로 이루어집니다. 스냅샷은 계정별로 캐시합니다. 권한 부여, 배정, 상속, 리소스 카탈로그, 정책, 구성원 관계가 조금이라도 바뀌면 해당 범위(카탈로그 또는 테넌트)의 버전 번호가 올라가 캐시가 무효화됩니다. 권한이 필요한 인터페이스는 응답 헤더 X-Authorization-Version에 현재 버전을 반환하고, 콘솔은 이것을 보고 메뉴를 다시 로드할지 판단합니다. Open API는 같은 버전을 ETag로 표현합니다.
