SpaceRole
최종 수정: 2026년 6월 22일
SpaceRole은 Space 구성원에게 주는 권한 묶음입니다. Content Type·Content·Media에 대해 무엇을(읽기·생성·편집·삭제·발행) 할 수 있는지, 그리고 Space 설정에 접근할 수 있는지를 한 리소스에 담습니다. 어떤 Content Type만, 자기가 만든 것만 등으로 권한 범위를 좁히는 필터도 SpaceRole 안에서 정합니다.
만든 SpaceRole은 그 자체로는 아무에게도 적용되지 않습니다. Space Membership의 roles에 이 SpaceRole의 Refer를 넣어 구성원에게 부여합니다. 한 구성원이 여러 SpaceRole을 동시에 가질 수 있습니다. 또 DeliveryAccessToken도 least-privilege(최소 권한) SpaceRole 하나에 묶여, 그 토큰으로 전달받을 수 있는 범위가 결정됩니다.
리소스 구조
다음은 SpaceRole "상품 읽기 전용"의 단일 조회 응답입니다. sys(시스템 속성)와 함께, 권한을 정하는 본문 속성 contentType·content·media·settings를 가집니다.
{
"sys": {
"id": "3trmXRM3RqbgSnifyg7ObyNrQQbHbm",
"type": "SpaceRole",
"space": { "sys": { "id": "HnQ32YiH", "type": "Refer", "targetType": "Space" } },
"createdBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
"createdAt": "2026-06-16T09:53:16.617Z",
"updatedBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
"updatedAt": "2026-06-16T09:53:16.617Z",
"isLocked": false,
"version": 1
},
"name": "상품 읽기 전용",
"contentType": { "All": { "Allow": [] } },
"content": {
"Read": {
"Allow": [
{ "contentType": { "sys": { "id": "3trmXRLdJF4GBlAjtcuoZ7Pnxj8dlA", "type": "Refer", "targetType": "ContentType" } } }
]
}
},
"media": { "All": { "Allow": [] } },
"settings": []
}주요 키:
contentType: Content Type 자체(스키마)에 대한 권한 맵입니다. Content Type을 읽고, 만들고, 고치고, 삭제하고, 발행하는 권한을 액션별로 정합니다.content: Content(콘텐츠 데이터)에 대한 권한 맵입니다. 위 예시는 특정 Content Type의 Content만 읽도록 한정한 모습입니다.media: Media(파일·이미지)에 대한 권한 맵입니다.settings: Space 설정 접근 권한을 정하는 문자열 배열입니다. 전체 접근은["SETTING_ALL"], 아무 설정 접근도 주지 않으면[]입니다.isLocked:true이면 Weegloo가 기본으로 제공하는 역할(예: Administrator)이라 수정·삭제할 수 없습니다.
시스템 속성 (sys)
모든 SpaceRole은 공통 시스템 속성을 sys 객체에 담습니다. space·createdBy·updatedBy는 Refer 모양({ "sys": { "id", "type": "Refer", "targetType" } })으로 들어갑니다.
| 속성 | 타입 | 설명 |
|---|---|---|
id | string | 리소스 고유 식별자. |
type | string | 리소스 종류. SpaceRole은 항상 "SpaceRole". |
space | Refer<Space> | 이 SpaceRole이 속한 Space. |
createdBy | Refer<User> | 생성한 사용자. |
createdAt | string (date-time) | 생성 시각. |
updatedBy | Refer<User> | 마지막으로 수정한 사용자. |
updatedAt | string (date-time) | 마지막 수정 시각. |
isLocked | boolean | true이면 기본 제공 역할이라 수정·삭제할 수 없습니다. 직접 만든 역할은 false입니다. |
version | integer (≥1) | 리소스 버전. 수정할 때마다 1씩 올라갑니다. |
SpaceRole은 발행 개념이 없는 설정 리소스입니다. 그래서 Content·Media와 달리 sys에 publish·archive·status가 없고, version만 가집니다. version은 SpaceRole을 수정할 때마다 오릅니다.
권한 맵: contentType·content·media
contentType·content·media는 각각 액션을 키로 갖는 맵입니다. 액션은 Read(읽기)·Create(생성)·Edit(편집)·Delete(삭제)·Publish(발행)이며, 모든 액션을 한꺼번에 가리키는 All도 있습니다. 각 액션의 값은 Allow(허용)와 Deny(거부) 규칙 배열을 담은 객체입니다.
"content": {
"Read": { "Allow": [ /* 규칙 */ ], "Deny": [ /* 규칙 */ ] },
"Edit": { "Allow": [ /* 규칙 */ ] }
}각 규칙(rule) 객체는 권한 범위를 좁히는 선택적 필터를 가집니다.
contentType: 그 규칙이 적용되는 대상을 특정 Content Type 하나로 한정합니다. Content Type을 가리키는Refer를 넣습니다.createdBy: 특정 사용자가 만든 리소스만으로 한정합니다.sys.id에 특정 사용자 id를 넣으면 그 사람이 만든 것만, 예약값:self를 넣으면 "지금 호출한 사용자가 만든 것만"으로 한정됩니다.tag: 특정 Tag가 달린 리소스만으로 한정합니다.
빈 Allow 배열 []는 그 종류 전체에 액션을 허용한다는 뜻입니다. 필터가 비어 있으니 거를 것이 없어, 모든 리소스에 그 액션이 열립니다.
예시 1: Administrator (전체 권한, 기본 제공)
Administrator 역할은 contentType·content·media 모두 All 액션에 빈 Allow를 주어 전체를 허용하고, settings에 ["SETTING_ALL"]을 주어 Space 설정 전체에 접근합니다. 이 역할은 Weegloo가 기본 제공하므로 sys.isLocked가 true이고 수정·삭제할 수 없습니다.
{
"sys": {
"id": "3trmXRLdJF4GBlAjtcuoWfVubsasp4",
"type": "SpaceRole",
"space": { "sys": { "id": "HnQ32YiH", "type": "Refer", "targetType": "Space" } },
"createdBy": { "sys": { "id": "_", "type": "Refer", "targetType": "User" } },
"createdAt": "2026-06-14T14:56:04.737Z",
"updatedBy": { "sys": { "id": "_", "type": "Refer", "targetType": "User" } },
"updatedAt": "2026-06-14T14:56:04.737Z",
"isLocked": true,
"version": 1
},
"name": "Administrator",
"description": "Members of this role have full access to everything in this space.",
"contentType": { "All": { "Allow": [] } },
"content": { "All": { "Allow": [] } },
"media": { "All": { "Allow": [] } },
"settings": ["SETTING_ALL"]
}예시 2: 읽기 전용 (특정 Content Type만)
직접 만드는 least-privilege 역할의 예입니다. content의 Read 액션에만 규칙을 두고, 그 규칙의 contentType 필터로 특정 Content Type 하나로 한정합니다. Content Type 자체와 Media는 All을 빈 Allow로 열어 두었지만, 콘텐츠 데이터는 그 한 종류를 읽는 것만 가능합니다. settings가 []이므로 Space 설정에는 접근하지 못합니다. 이런 역할을 DeliveryAccessToken에 묶으면 전달 토큰이 그 범위만 읽게 됩니다. 이 역할의 JSON은 위 리소스 구조의 "상품 읽기 전용"과 같습니다.
settings (Space 설정 접근)
settings는 권한 맵이 아니라 문자열 배열입니다. Space 설정에 대한 접근 권한을 담으며, 전체 접근은 ["SETTING_ALL"], 아무 접근도 주지 않으면 []로 둡니다.
액션 목록(
Read·Create·Edit·Delete·Publish·All)과 필터 키(contentType·createdBy·tag)·:self의미는weegloo-space-role권한 규칙 정의를 기준으로 합니다.
API
아래 모든 엔드포인트의 기준 URL은 https://cma.weegloo.com/v1이며, Authorization 헤더에 CMA를 인증하는 Bearer 토큰이 필요합니다. 역할 수정(PUT·PATCH)에는 낙관적 동시성 제어를 위해 X-Weegloo-Version 헤더(현재 리소스의 sys.version)를 함께 보내야 합니다. 생성과 삭제에는 이 헤더가 없습니다. sys.isLocked가 true인 기본 제공 역할은 수정·삭제할 수 없습니다.
관련 문서
- Space Membership: 구성원의
roles에 SpaceRole을 바인딩. - Delivery Access Token: least-privilege SpaceRole에 묶는 전달 토큰.
- Content Type: 권한 규칙이 가리키는 Content Type.
