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 (lihatsettingsdi bawah).isLocked: Jikatrue, 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" } }).
| Properti | Tipe | Deskripsi |
|---|---|---|
id | string | Pengidentifikasi unik resource. |
type | string | Jenis resource. SpaceRole selalu "SpaceRole". |
space | Refer<Space> | Space tempat SpaceRole ini berada. |
createdBy | Refer<User> | Pengguna yang membuat. |
createdAt | string (date-time) | Waktu pembuatan. |
updatedBy | Refer<User> | Pengguna yang terakhir mengubah. |
updatedAt | string (date-time) | Waktu perubahan terakhir. |
isLocked | boolean | Jika true, ini peran bawaan sehingga tidak dapat diubah atau dihapus. Peran yang Anda buat sendiri bernilai false. |
version | integer (≥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 memasukkanReferyang menunjuk ke resource sasaran. Pada petacontentTypeia berarti satu Content Type tertentu, dan pada petascriptberarti satu Script tertentu.contentType: Membatasi pada Content Type tempat Content itu berada. Anda memasukkanReferyang menunjuk ke Content Type.createdBy: Membatasi hanya pada resource yang dibuat oleh pengguna tertentu. Jika Anda memasukkan id pengguna tertentu padasys.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 izin | Filter yang dapat dipakai | Filter yang membuat penyimpanan ditolak |
|---|---|---|
contentType | self (Content Type itu sendiri)·createdBy | contentType |
content | contentType (jenis tempat Content itu berada)·createdBy·tag | self |
media | createdBy·tag | self |
script | self (Script itu sendiri)·createdBy | contentType·tag |
- Sasaran pada peta
contentTypeditentukan denganself, bukancontentType. Sebab yang dibatasi adalah Content Type itu sendiri. FiltercontentTypeberarti "jenis yang dirujuk resource ini", sehingga hanya cocok untuk petacontent. - Filter yang mencoba mempersempit lewat sumbu yang tidak ada pada resource itu (
tagpada Content Type,contentTypepada 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),publishWithAuthorpada Content Type sasaran harustrue. CDA menilai filter ini dengansys.createdBydari snapshot publikasi, dan jikapublishWithAuthorbernilai bawaanfalsemaka snapshot tidak memuat penulis sehingga aturanAllowtidak mencocokkan apa pun, dan aturanDenytidak menyaring siapa pun. CMA (pengelolaan) menilai dengansys.createdBydari draf sehingga tidak bergantung pada pengaturan ini.publishWithAuthortidak berlaku surut, jadi harus diaktifkan sebelum konten dipublikasikan, dan Content yang sudah dipublikasikan harus dipublikasikan ulang. Lihat penjelasanpublishWithAuthorpada 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.
| Aksi | Yang dapat dikelola |
|---|---|
SETTING_GENERAL | Space itu sendiri (nama, deskripsi, dan sebagainya) |
SETTING_LOCALE | Locale |
SETTING_WEBHOOK | Webhook (termasuk riwayat pemanggilan dan statusnya) |
SETTING_APP | Pemasangan Market App |
SETTING_TAG | Tag |
SETTING_DELIVERY_ACCESS_TOKEN | Delivery Access Token |
SETTING_SPACE_ACCESS_TOKEN | Space Access Token |
SETTING_USER | Space Membership (penugasan anggota) |
SETTING_ROLE | SpaceRole |
SETTING_WEB_HOSTING | Web Hosting dan domain kustom |
SETTING_SERVICE_LOGIN | ServiceLogin, ServiceUser, ServiceUserRole |
SETTING_EMAIL_ACCOUNT | Akun pengirim email |
SETTING_MONITORING | Melihat penggunaan dan metrik |
SETTING_SCHEDULER | Scheduler dan catatan eksekusinya |
SETTING_ALL | Semua 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 memasukkanReferyang menunjuk ke Script itu (targetType-nyaScript).createdBy: Membatasi berdasarkan pembuatnya (dengan:selfberarti "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.
| Kode | Kondisi |
|---|---|
WGL400020 | Anda 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.
Dokumen terkait
- Space Membership: Mengikat SpaceRole ke
rolesanggota. - Delivery Access Token: Token pengiriman yang diikat ke SpaceRole least-privilege.
- Content Type: Content Type yang ditunjuk oleh aturan izin.
