SpaceRole

최종 수정: 2026년 6월 22일

SpaceRoleSpace 구성원에게 주는 권한 묶음입니다. Content Type·Content·Media에 대해 무엇을(읽기·생성·편집·삭제·발행) 할 수 있는지, 그리고 Space 설정에 접근할 수 있는지를 한 리소스에 담습니다. 어떤 Content Type만, 자기가 만든 것만 등으로 권한 범위를 좁히는 필터도 SpaceRole 안에서 정합니다.

만든 SpaceRole은 그 자체로는 아무에게도 적용되지 않습니다. Space Membershiproles에 이 SpaceRoleRefer를 넣어 구성원에게 부여합니다. 한 구성원이 여러 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 TypeContent만 읽도록 한정한 모습입니다.
  • media: Media(파일·이미지)에 대한 권한 맵입니다.
  • settings: Space 설정 접근 권한을 정하는 문자열 배열입니다. 전체 접근은 ["SETTING_ALL"], 아무 설정 접근도 주지 않으면 []입니다.
  • isLocked: true이면 Weegloo가 기본으로 제공하는 역할(예: Administrator)이라 수정·삭제할 수 없습니다.

시스템 속성 (sys)

모든 SpaceRole은 공통 시스템 속성을 sys 객체에 담습니다. space·createdBy·updatedByRefer 모양({ "sys": { "id", "type": "Refer", "targetType" } })으로 들어갑니다.

속성타입설명
idstring리소스 고유 식별자.
typestring리소스 종류. SpaceRole은 항상 "SpaceRole".
spaceRefer<Space>SpaceRole이 속한 Space.
createdByRefer<User>생성한 사용자.
createdAtstring (date-time)생성 시각.
updatedByRefer<User>마지막으로 수정한 사용자.
updatedAtstring (date-time)마지막 수정 시각.
isLockedbooleantrue이면 기본 제공 역할이라 수정·삭제할 수 없습니다. 직접 만든 역할은 false입니다.
versioninteger (≥1)리소스 버전. 수정할 때마다 1씩 올라갑니다.

SpaceRole은 발행 개념이 없는 설정 리소스입니다. 그래서 Content·Media와 달리 syspublish·archive·status가 없고, version만 가집니다. versionSpaceRole을 수정할 때마다 오릅니다.

권한 맵: 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.isLockedtrue이고 수정·삭제할 수 없습니다.

{
  "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 역할의 예입니다. contentRead 액션에만 규칙을 두고, 그 규칙의 contentType 필터로 특정 Content Type 하나로 한정합니다. Content Type 자체와 MediaAll을 빈 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.isLockedtrue인 기본 제공 역할은 수정·삭제할 수 없습니다.