SpaceRole

SpaceRole adalah kumpulan izin yang diberikan kepada anggota Space. Dalam satu resource, ia memuat apa yang dapat dilakukan (membaca, membuat, mengedit, menghapus, mempublikasikan) terhadap Content Type, Content, dan Media, apakah Script dapat dijalankan dan dikelola, serta apakah pengaturan Space dapat diakses. Filter yang mempersempit cakupan izin, seperti hanya Content Type tertentu atau hanya yang dibuat sendiri, juga ditetapkan di dalam SpaceRole.

SpaceRole yang sudah dibuat tidak diterapkan ke siapa pun dengan sendirinya. Anda memberikannya ke anggota dengan memasukkan Refer SpaceRole ini ke roles pada Space Membership. Satu anggota dapat memiliki beberapa SpaceRole sekaligus. Selain itu, DeliveryAccessToken juga terikat pada satu SpaceRole yang least-privilege (hak akses minimum), sehingga cakupan yang dapat dikirim melalui token tersebut ditentukan oleh peran itu.

Struktur resource

Berikut adalah respons pengambilan tunggal dari SpaceRole "Produk Hanya-baca". Bersama dengan sys (properti sistem), ia memiliki properti isi yang menetapkan izin: contentType, content, media, settings, dan script.

{
  "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": "Produk Hanya-baca",
  "contentType": { "All": { "Allow": [] } },
  "content": {
    "Read": {
      "Allow": [
        { "contentType": { "sys": { "id": "3trmXRLdJF4GBlAjtcuoZ7Pnxj8dlA", "type": "Refer", "targetType": "ContentType" } } }
      ]
    }
  },
  "media": { "All": { "Allow": [] } },
  "settings": [],
  "script": {}
}

Kunci utama:

  • contentType: Peta izin atas Content Type itu sendiri (skema). Menetapkan izin membaca, membuat, mengedit, menghapus, dan mempublikasikan Content Type per aksi.
  • content: Peta izin atas Content (data konten). Contoh di atas memperlihatkan keadaan yang dibatasi hanya untuk membaca Content dari Content Type tertentu.
  • media: Peta izin atas Media (berkas, gambar).
  • script: Peta izin atas Script (endpoint backend deklaratif yang dipanggil frontend Anda). Menetapkan eksekusi (Execute) dan pengelolaan (membuat, membaca, mengedit, menghapus) per aksi.
  • settings: Larik string yang menetapkan izin akses ke pengaturan Space. Ini bukan peta izin, melainkan mendaftar nama aksi apa adanya. Akses penuh adalah ["SETTING_ALL"], jika tidak diberi akses pengaturan apa pun nilainya [], dan Anda juga dapat memilih hanya pengaturan yang diperlukan (lihat settings di bawah).
  • isLocked: Jika true, ini adalah peran yang disediakan secara bawaan oleh Weegloo (misalnya Administrator) sehingga tidak dapat diubah atau dihapus.

Properti sistem (sys)

Setiap SpaceRole memuat properti sistem umum dalam objek sys. space, createdBy, dan updatedBy masuk dalam bentuk Refer ({ "sys": { "id", "type": "Refer", "targetType" } }).

PropertiTipeDeskripsi
idstringPengidentifikasi unik resource.
typestringJenis resource. SpaceRole selalu "SpaceRole".
spaceRefer<Space>Space tempat SpaceRole ini berada.
createdByRefer<User>Pengguna yang membuat.
createdAtstring (date-time)Waktu pembuatan.
updatedByRefer<User>Pengguna yang terakhir mengubah.
updatedAtstring (date-time)Waktu perubahan terakhir.
isLockedbooleanJika true, ini peran bawaan sehingga tidak dapat diubah atau dihapus. Peran yang Anda buat sendiri bernilai false.
versioninteger (≥1)Versi resource. Bertambah 1 setiap kali diubah.

SpaceRole adalah resource pengaturan yang tidak memiliki konsep publikasi. Karena itu, berbeda dari Content dan Media, sys-nya tidak memiliki publish, archive, atau status, dan hanya memiliki version. version bertambah setiap kali SpaceRole diubah.

Peta izin: contentType, content, media

contentType, content, dan media masing-masing adalah peta yang memiliki aksi sebagai kunci. Aksi yang dapat dipakai adalah Create (membuat), Read (membaca), Edit (mengedit), Delete (menghapus), Publish (mempublikasikan), Unpublish (membatalkan publikasi), Archive (mengarsipkan), dan Unarchive (membatalkan pengarsipan), serta ada All yang menunjuk semua aksi sekaligus. Tidak ada aksi bernama Save. Izin untuk mengubah adalah Edit, sedangkan Save adalah nama event yang dilanggan Webhook. Nilai setiap aksi adalah objek yang memuat larik aturan Allow (mengizinkan) dan Deny (menolak).

"content": {
  "Read":   { "Allow": [ /* aturan */ ], "Deny": [ /* aturan */ ] },
  "Edit":   { "Allow": [ /* aturan */ ] }
}

Setiap objek aturan (rule) memiliki filter opsional yang mempersempit cakupan izin.

  • self: Membatasi sasaran penerapan aturan itu pada resource itu sendiri saja. Anda memasukkan Refer yang menunjuk ke resource sasaran. Pada peta contentType ia berarti satu Content Type tertentu, dan pada peta script berarti satu Script tertentu.
  • contentType: Membatasi pada Content Type tempat Content itu berada. Anda memasukkan Refer yang menunjuk ke Content Type.
  • createdBy: Membatasi hanya pada resource yang dibuat oleh pengguna tertentu. Jika Anda memasukkan id pengguna tertentu pada sys.id, hanya yang dibuat orang itu; jika memasukkan nilai cadangan :self, dibatasi pada "hanya yang dibuat oleh pengguna yang memanggil saat ini".
  • tag: Membatasi hanya pada resource yang diberi Tag tertentu.

Filter mana yang bermakna pada peta izin mana sudah ditetapkan. Jika Anda memasukkan filter yang tidak sesuai, penyimpanan role ditolak. Sebab, jika diabaikan secara senyap, aturan yang Anda anggap sudah dipersempit justru menjadi izin penuh.

Peta izinFilter yang dapat dipakaiFilter yang membuat penyimpanan ditolak
contentTypeself (Content Type itu sendiri)·createdBycontentType
contentcontentType (jenis tempat Content itu berada)·createdBy·tagself
mediacreatedBy·tagself
scriptself (Script itu sendiri)·createdBycontentType·tag
  • Sasaran pada peta contentType ditentukan dengan self, bukan contentType. Sebab yang dibatasi adalah Content Type itu sendiri. Filter contentType berarti "jenis yang dirujuk resource ini", sehingga hanya cocok untuk peta content.
  • Filter yang mencoba mempersempit lewat sumbu yang tidak ada pada resource itu (tag pada Content Type, contentType pada Media) memang tidak terhalang saat disimpan, tetapi aturannya tidak akan dinilai sesuai maksud Anda. Jangan dipakai.

Saat menilai filter createdBy (termasuk :self) di CDA (pengiriman), publishWithAuthor pada Content Type sasaran harus true. CDA menilai filter ini dengan sys.createdBy dari snapshot publikasi, dan jika publishWithAuthor bernilai bawaan false maka snapshot tidak memuat penulis sehingga aturan Allow tidak mencocokkan apa pun, dan aturan Deny tidak menyaring siapa pun. CMA (pengelolaan) menilai dengan sys.createdBy dari draf sehingga tidak bergantung pada pengaturan ini. publishWithAuthor tidak berlaku surut, jadi harus diaktifkan sebelum konten dipublikasikan, dan Content yang sudah dipublikasikan harus dipublikasikan ulang. Lihat penjelasan publishWithAuthor pada Content Type.

Larik Allow kosong [] berarti mengizinkan aksi pada seluruh jenis tersebut. Karena filter kosong, tidak ada yang disaring, sehingga aksi itu terbuka untuk semua resource.

Larik Deny kosong [] bekerja secara terbalik. Ia bukan berarti "tidak menolak apa pun", melainkan menolak seluruh jenis tersebut sehingga aksi itu terhalang sepenuhnya. Ia tetap terhalang meskipun Anda turut menuliskan Allow. Meletakkan [] dengan maksud bahwa tidak ada yang perlu ditolak justru menghasilkan kebalikannya, jadi jika Anda tidak ingin menolak apa pun, jangan masukkan kunci Deny itu sendiri.

Contoh 1: Administrator (izin penuh, disediakan bawaan)

Peran Administrator memberikan Allow kosong pada aksi All untuk contentType, content, media, dan script sehingga mengizinkan seluruhnya, dan memberikan ["SETTING_ALL"] pada settings sehingga mengakses seluruh pengaturan Space. Peran ini disediakan bawaan oleh Weegloo, jadi sys.isLocked-nya true dan tidak dapat diubah atau dihapus.

{
  "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"],
  "script": { "All": { "Allow": [] } }
}

Contoh 2: Hanya baca (hanya Content Type tertentu)

Ini contoh peran least-privilege yang Anda buat sendiri. Aturan hanya diletakkan pada aksi Read dari content, dan dengan filter contentType pada aturan itu dibatasi pada satu Content Type tertentu. Content Type itu sendiri dan Media dibuka dengan All ber-Allow kosong, tetapi data konten hanya dapat dibaca untuk satu jenis itu. Karena settings adalah [], pengaturan Space tidak dapat diakses. Jika peran seperti ini diikat ke DeliveryAccessToken, token pengiriman hanya membaca cakupan itu. JSON peran ini sama dengan "Produk Hanya-baca" pada Struktur resource di atas.

settings (akses pengaturan Space)

settings bukan peta izin melainkan larik string. Ia memuat izin akses ke pengaturan Space, dan tidak memiliki Allow/Deny maupun filter. Aksi yang Anda masukkan ke dalam larik diizinkan, sedangkan aksi yang tidak dimasukkan tidak diizinkan.

Akses penuh adalah ["SETTING_ALL"], dan untuk tidak memberi akses apa pun, biarkan []. Jika Anda memerlukan sesuatu di antara keduanya, pilih aksi di bawah ini.

AksiYang dapat dikelola
SETTING_GENERALSpace itu sendiri (nama, deskripsi, dan sebagainya)
SETTING_LOCALELocale
SETTING_WEBHOOKWebhook (termasuk riwayat pemanggilan dan statusnya)
SETTING_APPPemasangan Market App
SETTING_TAGTag
SETTING_DELIVERY_ACCESS_TOKENDelivery Access Token
SETTING_SPACE_ACCESS_TOKENSpace Access Token
SETTING_USERSpace Membership (penugasan anggota)
SETTING_ROLESpaceRole
SETTING_WEB_HOSTINGWeb Hosting dan domain kustom
SETTING_SERVICE_LOGINServiceLogin, ServiceUser, ServiceUserRole
SETTING_EMAIL_ACCOUNTAkun pengirim email
SETTING_MONITORINGMelihat penggunaan dan metrik
SETTING_SCHEDULERScheduler dan catatan eksekusinya
SETTING_ALLSemua di atas

Kedua jenis token memiliki aksi yang terpisah. Jika Anda hanya memberikan SETTING_DELIVERY_ACCESS_TOKEN, peran itu dapat menerbitkan Delivery Access Token yang hanya-baca, tetapi tidak dapat menerbitkan Space Access Token yang juga dapat menulis.

Aksi pada settings hanya dipanggil dengan sesi login konsol dan Personal Access Token. Space Access Token, Delivery Access Token, atau token ServiceUser tidak dapat memanggil API dalam daftar ini, apa pun aksi yang dimuat oleh perannya.

Daftar aksi peta izin (contentType, content, media, script), kunci filter (self, contentType, createdBy, tag), makna :self, dan filter mana yang berlaku pada peta mana mengikuti bagian Peta izin: contentType, content, media di atas.

script (Izin Script)

script adalah peta izin atas Script (endpoint backend deklaratif yang dipanggil frontend Anda). Strukturnya sama dengan content dan media: aksi sebagai kunci, dengan larik aturan Allow/Deny sebagai nilai. Aksi yang dipakainya adalah sebagai berikut.

  • Create, Read, Edit, Delete: Membuat, membaca, mengubah, dan menghapus resource Script.
  • Execute: Menjalankan Script (memanggil /execute). Ini aksi khusus Script.
  • All: Aksi payung yang mencakup semua di atas.

Karena Script bukan resource yang dipublikasikan, aksi publikasi seperti Publish/Unpublish tidak dipakai. Filter aturan yang dapat dipakai ada dua: self dan createdBy.

  • self: Membatasi pada satu Script tertentu. Anda memasukkan Refer yang menunjuk ke Script itu (targetType-nya Script).
  • createdBy: Membatasi berdasarkan pembuatnya (dengan :self berarti "hanya Script yang dibuat sendiri").

contentType dan tag adalah sumbu yang tidak melekat pada Script, sehingga jika dimasukkan, penyimpanan role ditolak.

Sebagai contoh, untuk mengizinkan seseorang menjalankan Script apa pun tetapi hanya membaca yang dibuatnya sendiri, tulis seperti ini.

"script": {
  "Execute": { "Allow": [] },
  "Read": {
    "Allow": [
      { "createdBy": { "sys": { "id": ":self", "type": "Refer", "targetType": "User" } } }
    ]
  }
}

Mempersempit dengan self menghasilkan izin minimum yang hanya dapat menjalankan satu Script. Ketika Anda memberi izin eksekusi kepada sistem luar seperti penyedia pembayaran, ini adalah cara membuka hanya satu pintu yang akan dipanggil sistem itu dan menutup sisanya.

"script": {
  "Execute": {
    "Allow": [
      { "self": { "sys": { "id": "3trmXRMZcTAjDnphewjj1AaxYcaxlK", "type": "Refer", "targetType": "Script" } } }
    ]
  }
}

Jika Anda mengikat role ini ke Space Access Token, token itu hanya dapat menjalankan satu Script yang ditentukan. Alasan mempersempit menjadi satu izin eksekusi, dan fakta bahwa eksekusi Script memakai izin penulis yang didelegasikan, dibahas di Semantik eksekusi, batasan, dan keamanan Script.

Izin script ini menetapkan "apakah resource Script dapat dijalankan dan dikelola". Terlepas dari itu, saat menyusun Script (membuat atau mengubah), pada saat penyimpanan penulis harus benar-benar memiliki izin aksi Content/Media yang dioperasikan oleh statement dari Script tersebut; jika tidak, penyimpanan ditolak (lihat Error pada Script). Rinciannya dibahas di Semantik eksekusi, batasan, dan keamanan Script.

Error

Berikut adalah kode yang muncul saat Anda menangani SpaceRole. Untuk kode yang berlaku umum pada semua resource, lihat Error umum.

KodeKondisi
WGL400020Anda mencoba menyimpan role dengan memasukkan ke dalam aturan sebuah filter yang tidak bermakna pada peta izin tersebut.

API

Base URL untuk semua endpoint di bawah adalah https://cma.weegloo.com/v1, dan diperlukan token Bearer yang mengautentikasi ke CMA pada header Authorization. Untuk mengubah peran (PUT, PATCH), Anda harus mengirim juga header X-Weegloo-Version (sys.version resource saat ini) demi kontrol konkurensi optimistik. Pembuatan dan penghapusan tidak memerlukan header ini. Peran bawaan dengan sys.isLocked bernilai true tidak dapat diubah atau dihapus.