forked from baron/baron-sso
사용자 상태 세분화
This commit is contained in:
@@ -156,6 +156,7 @@ curl 'https://sso.example.com/api/v1/integrations/org-context?tenantSlug=hanmac&
|
||||
- 외부 앱은 `schemaVersion`을 확인하고, 알 수 없는 version이면 별도 fallback을 적용한다.
|
||||
- `tree`는 같은 tenant 집합을 계층 구조로 제공하고, `tenants`는 slug/id lookup용 flat array로 제공한다.
|
||||
- 사용자 목록은 top-level `users`가 아니라 각 tenant의 `members`에 직접 소속 사용자 배열로 제공한다.
|
||||
- `members`에는 `active`, `temporary_leave`, `suspended` 사용자만 포함한다. `preboarding`, `baron_guest`, `extended_leave`, `archived` 사용자는 email/local-part 선점 대상일 수 있지만 일반 조직도와 외부 연동 조직 조회에는 노출하지 않는다.
|
||||
- tenant 세부 분류는 `type`과 `orgUnitType`으로 구분한다. `orgUnitType`은 tenant `config.orgUnitType` 값이 있을 때만 포함한다.
|
||||
- 기본 사용자 응답은 로그인 claim 수준의 표시 정보만 제공한다. UUID, role/status, metadata, 생성/수정 시각은 기본 응답에 포함하지 않는다.
|
||||
- 사용자 UUID와 전화번호가 필요한 연동은 `includeUserIds=true`를 사용한다. 이때 각 tenant `members[].id`와 `members[].phone`만 추가된다.
|
||||
|
||||
@@ -28,8 +28,11 @@ Baron SSO는 Ory Stack을 SoT로 두고, PostgreSQL은 read-model 및 비즈니
|
||||
한맥가족 이메일 정책은 이미 #668에서 다음 방향으로 구현되어 있습니다.
|
||||
|
||||
- `hanmac-family` root tenant와 descendant subtree에서 email local-part를 unique로 강제합니다.
|
||||
- local-part unique 검사는 `archived`를 포함한 모든 사용자 상태를 대상으로 합니다.
|
||||
- 단건 생성은 중복 시 `409 Conflict`로 차단합니다.
|
||||
- bulk import는 `@domain` 입력 시 이름 기반 local-part를 제안하고, 생성 직전 재검증합니다.
|
||||
- `preboarding`, `baron_guest`, `extended_leave`, `archived` 사용자는 Worksmobile 구성원 생성/갱신/backfill 대상에서 제외합니다.
|
||||
- `baron_guest`, `extended_leave`, `archived` 상태로 전환된 사용자는 기존 Worksmobile 계정 delete/deprovision 대상입니다.
|
||||
|
||||
## 웍스모바일 Directory API 확인 사항
|
||||
|
||||
@@ -335,9 +338,12 @@ Worksmobile 운영 화면은 `orgfront`가 아니라 `adminfront`의 tenant deta
|
||||
|
||||
- 후보 위치: `UserHandler.UpdateUser`에서 Kratos update와 local DB sync 후
|
||||
- `email`, `name`, `phone`, `companyCode`, `tenant_id`, `metadata.additionalAppointments` 변경 시 `USER UPSERT` enqueue
|
||||
- `inactive`는 Worksmobile suspend로 동기화합니다.
|
||||
- `suspended`는 Worksmobile suspend로 동기화합니다.
|
||||
- `temporary_leave`는 Worksmobile 계정을 유지합니다.
|
||||
- `preboarding`은 Worksmobile 계정을 생성하지 않습니다.
|
||||
- `baron_guest`, `extended_leave`, `archived`는 Worksmobile delete/deprovision으로 동기화합니다.
|
||||
- Baron user delete는 Worksmobile delete로 동기화합니다.
|
||||
- `leave-of-absence`는 필요하지만 orgfront/Baron user status model 확장이 선행되어야 하므로 별도 scope로 분리합니다.
|
||||
- 기존 `inactive` 입력은 `preboarding`, `leave_of_absence` 입력은 `temporary_leave`, `baron_only` 입력은 `baron_guest`로 호환 처리합니다.
|
||||
|
||||
## 테스트 전략
|
||||
|
||||
@@ -410,9 +416,11 @@ Worksmobile 운영 화면은 `orgfront`가 아니라 `adminfront`의 tenant deta
|
||||
- Developer Console External Key Mapping이 비어 있는 기존 조직/구성원은 CSV mapping 또는 API external-key update가 선행되어야 합니다.
|
||||
|
||||
6. 상태 정책
|
||||
- Baron `inactive`는 Worksmobile suspend로 동기화합니다.
|
||||
- Baron `active`, `temporary_leave`, `suspended`는 Worksmobile 구성원 비교 및 backfill scope에 포함합니다.
|
||||
- Baron `suspended`는 Worksmobile suspend로 동기화합니다.
|
||||
- Baron `preboarding`은 Worksmobile 계정을 생성하지 않습니다.
|
||||
- Baron `baron_guest`, `extended_leave`, `archived`는 Worksmobile delete/deprovision으로 동기화합니다.
|
||||
- Baron delete는 Worksmobile delete로 동기화합니다.
|
||||
- leave-of-absence는 별도 user 상태 확장 이슈로 분리합니다.
|
||||
- 직급/직책/사용자 유형 External Key sync는 이번 scope에서 제외합니다.
|
||||
|
||||
7. adminfront 권한 경계
|
||||
|
||||
Reference in New Issue
Block a user