forked from baron/baron-sso
테넌트 목록 조회 cursor기반으로 재구성. 사용자 metadata 미사용 필드 제거
This commit is contained in:
@@ -32,7 +32,8 @@ GET /api/v1/integrations/org-context
|
||||
| 이름 | 기본값 | 설명 |
|
||||
| --- | --- | --- |
|
||||
| `tenantSlug` | `hanmac-family` | 조회할 subtree root tenant slug. 지정하지 않으면 `hanmac-family` 전체 subtree를 반환한다. |
|
||||
| `includeUsers` | `true` | `false`이면 `users`와 `directUserIds`를 비운다. |
|
||||
| `includeUsers` | `true` | `false`이면 각 tenant의 `members`를 빈 배열로 반환한다. |
|
||||
| `includeUserIds` | `false` | `true`이면 각 tenant의 `members[].id`와 `members[].phone`만 추가한다. 사용자 UUID와 전화번호가 필요한 연동에서만 사용한다. |
|
||||
|
||||
상위 조직 지정은 slug만 사용한다. UUID 기반 지정은 계약에 포함하지 않는다.
|
||||
|
||||
@@ -67,7 +68,7 @@ curl 'https://sso.example.com/api/v1/integrations/org-context?tenantSlug=hanmac&
|
||||
"visibility": "public",
|
||||
"createdAt": "2026-05-13T00:00:00Z",
|
||||
"updatedAt": "2026-05-13T00:00:00Z",
|
||||
"directUserIds": [],
|
||||
"members": [],
|
||||
"children": [
|
||||
{
|
||||
"id": "01970f09-2b7b-7f83-b9d6-4f6c8b33f01a",
|
||||
@@ -83,8 +84,17 @@ curl 'https://sso.example.com/api/v1/integrations/org-context?tenantSlug=hanmac&
|
||||
"orgUnitType": "실",
|
||||
"createdAt": "2026-05-13T00:00:00Z",
|
||||
"updatedAt": "2026-05-13T00:00:00Z",
|
||||
"directUserIds": [
|
||||
"01970f0a-5c28-74d8-a73a-f6e9e9a7b210"
|
||||
"members": [
|
||||
{
|
||||
"email": "user@example.com",
|
||||
"name": "홍길동",
|
||||
"grade": "책임",
|
||||
"position": "실장",
|
||||
"jobTitle": "Backend Engineer",
|
||||
"isOwner": true,
|
||||
"isLeader": true,
|
||||
"isPrimary": true
|
||||
}
|
||||
],
|
||||
"children": []
|
||||
}
|
||||
@@ -103,27 +113,35 @@ curl 'https://sso.example.com/api/v1/integrations/org-context?tenantSlug=hanmac&
|
||||
"memberCount": 0,
|
||||
"visibility": "public",
|
||||
"createdAt": "2026-05-13T00:00:00Z",
|
||||
"updatedAt": "2026-05-13T00:00:00Z"
|
||||
}
|
||||
],
|
||||
"users": [
|
||||
"updatedAt": "2026-05-13T00:00:00Z",
|
||||
"members": []
|
||||
},
|
||||
{
|
||||
"id": "01970f0a-5c28-74d8-a73a-f6e9e9a7b210",
|
||||
"email": "user@example.com",
|
||||
"name": "홍길동",
|
||||
"role": "user",
|
||||
"id": "01970f09-2b7b-7f83-b9d6-4f6c8b33f01a",
|
||||
"type": "USER_GROUP",
|
||||
"name": "플랫폼실",
|
||||
"slug": "platform",
|
||||
"parentId": "01970f08-91da-7286-bd19-882fb98d1f2c",
|
||||
"status": "active",
|
||||
"tenantIds": [
|
||||
"01970f09-2b7b-7f83-b9d6-4f6c8b33f01a"
|
||||
],
|
||||
"tenantSlugs": [
|
||||
"platform"
|
||||
],
|
||||
"grade": "책임",
|
||||
"position": "실장",
|
||||
"jobTitle": "Backend Engineer",
|
||||
"description": "",
|
||||
"domains": [],
|
||||
"memberCount": 0,
|
||||
"visibility": "internal",
|
||||
"orgUnitType": "실",
|
||||
"createdAt": "2026-05-13T00:00:00Z",
|
||||
"updatedAt": "2026-05-13T00:00:00Z"
|
||||
"updatedAt": "2026-05-13T00:00:00Z",
|
||||
"members": [
|
||||
{
|
||||
"email": "user@example.com",
|
||||
"name": "홍길동",
|
||||
"grade": "책임",
|
||||
"position": "실장",
|
||||
"jobTitle": "Backend Engineer",
|
||||
"isOwner": true,
|
||||
"isLeader": true,
|
||||
"isPrimary": true
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -136,3 +154,12 @@ curl 'https://sso.example.com/api/v1/integrations/org-context?tenantSlug=hanmac&
|
||||
- `visibility=private` tenant와 그 하위 tenant는 제외한다.
|
||||
- `visibility=internal` tenant는 M2M 연동용 JSON API에는 포함한다.
|
||||
- 외부 앱은 `schemaVersion`을 확인하고, 알 수 없는 version이면 별도 fallback을 적용한다.
|
||||
- `tree`는 같은 tenant 집합을 계층 구조로 제공하고, `tenants`는 slug/id lookup용 flat array로 제공한다.
|
||||
- 사용자 목록은 top-level `users`가 아니라 각 tenant의 `members`에 직접 소속 사용자 배열로 제공한다.
|
||||
- tenant 세부 분류는 `type`과 `orgUnitType`으로 구분한다. `orgUnitType`은 tenant `config.orgUnitType` 값이 있을 때만 포함한다.
|
||||
- 기본 사용자 응답은 로그인 claim 수준의 표시 정보만 제공한다. UUID, role/status, metadata, 생성/수정 시각은 기본 응답에 포함하지 않는다.
|
||||
- 사용자 UUID와 전화번호가 필요한 연동은 `includeUserIds=true`를 사용한다. 이때 각 tenant `members[].id`와 `members[].phone`만 추가된다.
|
||||
- `isOwner`는 appointment metadata의 `isOwner` 또는 `isManager` 기준이다.
|
||||
- `isLeader`는 appointment metadata의 `lead` 또는 `isLead` 기준이며, `isOwner`/`isManager`가 true인 경우에도 true로 본다.
|
||||
- `isPrimary`는 appointment metadata의 `representative`, `isPrimary`, `primary` 기준이다.
|
||||
- appointment별 `grade`, `position`, `jobTitle`, `department`가 있으면 해당 tenant membership 값으로 우선 사용한다.
|
||||
|
||||
Reference in New Issue
Block a user