ServiceUserRole
ServiceUserRole adalah kumpulan izin yang diberikan kepada end-user yang mendaftar ke produk, yaitu ServiceUser. Resource ini memuat apa yang dapat dilakukan (membaca, membuat, mengedit, menghapus) terhadap Content Type, Content, dan Media, apakah dapat menjalankan Script, beserta filter yang mempersempit cakupan, misalnya hanya Content Type tertentu atau hanya yang dibuat sendiri. Aksi yang dapat dipakai berbeda-beda pada setiap peta (lihat tabel Peta izin di bawah). Izin ini berlaku pada ACMA/ACDA yang dipanggil oleh ServiceUser.
ServiceUserRole dipakai di posisi yang berbeda dari SpaceRole. SpaceRole adalah kumpulan izin untuk Weegloo User (pengguna studio konten) dan berlaku pada CMA/CDA, sedangkan ServiceUserRole adalah kumpulan izin untuk ServiceUser yang mendaftar ke produk dan berlaku pada ACMA/ACDA. ServiceUserRole yang dibuat dengan sendirinya tidak berlaku bagi siapa pun. Anda menerapkannya dengan menetapkannya pada peran default (defaultRole) dari ServiceLogin atau membindingnya ke roleOverride dari ServiceUser.
Struktur resource
Berikut adalah respons single-read dari ServiceUserRole "Pembeli". Selain sys (properti sistem), resource ini memiliki properti badan yang menentukan izin: contentType, content, media, dan script.
{
"sys": {
"id": "3trmXRLXeZN2RTHvVj3hFDN5546vbp",
"type": "ServiceUserRole",
"space": { "sys": { "id": "HnQ32YiH", "type": "Refer", "targetType": "Space" } },
"createdBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
"createdAt": "2026-06-18T12:40:36.944Z",
"updatedBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
"updatedAt": "2026-06-18T12:40:36.944Z",
"version": 1
},
"name": "Pembeli",
"description": "Anggota yang dapat membaca produk yang dipublikasikan",
"contentType": { "All": { "Allow": [] } },
"content": {
"Read": {
"Allow": [
{ "contentType": { "sys": { "id": "3trmXRLdJF4GBlAjtcuoZ7Pnxj8dlA", "type": "Refer", "targetType": "ContentType" } } }
]
}
},
"media": { "All": { "Allow": [] } },
"script": {}
}Key utama:
contentType: peta izin terhadap Content Type itu sendiri (skema). ServiceUser hanya membaca kerangka formulirnya, sehingga yang ditetapkan hanyaRead.content: peta izin terhadap Content (data konten). Contoh di atas membatasi agar hanya Content dari Content Type tertentu yang dapat dibaca.media: peta izin terhadap Media (file dan gambar).script: peta izin terhadap Script (endpoint backend deklaratif). ServiceUser hanya menjalankan (Execute) Script.
Berbeda dari SpaceRole, ServiceUserRole tidak memiliki settings yang memuat akses ke pengaturan Space. Sebab ServiceUser tidak menangani pengaturan Space. Juga tidak ada sys.isLocked yang menandai apakah resource ini bawaan.
Properti sistem (sys)
Setiap ServiceUserRole 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 | Pengenal unik resource. |
type | string | Jenis resource. Untuk ServiceUserRole selalu "ServiceUserRole". |
space | Refer<Space> | Space tempat ServiceUserRole 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. |
version | integer (≥1) | Versi resource. Naik 1 setiap kali diubah. |
ServiceUserRole adalah resource pengaturan yang tidak memiliki konsep publikasi. Karena itu, berbeda dari Content dan Media, sys tidak memiliki publish, archive, atau status, dan hanya memiliki version. version naik setiap kali ServiceUserRole diubah. Berbeda dari SpaceRole, sys.isLocked juga tidak ada.
Peta izin: contentType, content, media
contentType, content, media, dan script masing-masing adalah peta yang memiliki aksi sebagai key. Nilai dari setiap aksi adalah objek yang memuat array aturan Allow (mengizinkan) dan Deny (menolak). Struktur petanya sama dengan SpaceRole, tetapi aksi yang dapat dipakai berbeda-beda pada setiap peta dan lebih sempit daripada SpaceRole.
| Peta izin | Aksi yang dapat dipakai |
|---|---|
contentType | All · Read |
content | All · Create · Read · Edit · Delete |
media | All · Create · Read · Delete |
script | All · Execute |
All menunjuk sekaligus semua aksi yang dapat dipakai pada peta tersebut. Jika Anda memasukkan aksi yang tidak ada di tabel sebagai key, penyimpanan peran ditolak. Kelompok publikasi (Publish, Unpublish, Archive, Unarchive) tidak ada pada peta mana pun karena Content dan Media yang dibuat anggota langsung dipublikasikan saat dibuat (lihat ACMA).
Tidak ada aksi bernama Save. Izin untuk mengubah adalah Edit, sedangkan Save adalah nama event yang dilanggan Webhook.
"content": {
"Read": { "Allow": [ /* aturan */ ], "Deny": [ /* aturan */ ] },
"Edit": { "Allow": [ /* aturan */ ] }
}Setiap objek aturan (rule) memiliki filter opsional yang mempersempit cakupan izin.
self: membatasi target penerapan aturan tersebut pada resource itu sendiri saja. Pada petacontentTypeia berarti satu Content Type tertentu, dan pada petascriptberarti satu Script tertentu.contentType: membatasi pada Content Type tempat Content itu berada. Diisi denganReferyang menunjuk ke Content Type.createdBy: membatasi hanya pada resource yang dibuat oleh pengguna tertentu. Jikasys.iddiisi dengan id tertentu, maka hanya yang dibuat orang itu; jika diisi nilai cadangan:self, maka dibatasi hanya pada "yang dibuat oleh ServiceUser yang sedang memanggil".tag: membatasi hanya pada resource yang diberi Tag tertentu.
Filter mana yang berlaku pada peta izin mana sama seperti pada SpaceRole (peta contentType menentukan sasarannya dengan self, dan peta content dengan contentType), dan memasukkan filter yang tidak sesuai membuat penyimpanan role ditolak. Tabel per peta ada di Peta izin pada SpaceRole.
Saat memasang filter
createdBy(termasuk:self) di ACDA,publishWithAuthorpada Content Type sasaran harustrue. ACDA menilai filter ini dengansys.createdBydari snapshot publikasi, dan jikapublishWithAuthorbernilai bawaanfalsemaka snapshot tidak memuat penulis sehingga aturanAllowtidak mencocokkan apa pun (anggota menerima resource miliknya sendiri sebagai hasil kosong), dan aturanDenytidak menyaring siapa pun. Sebaliknya ACMA (pengelolaan) menilai dengansys.createdBydari draf sehingga tidak bergantung pada pengaturan ini, jadi aturan yang sama bisa berfungsi di ACMA tetapi meleset di ACDA.publishWithAuthorharus diaktifkan sebelum anggota mengunggah tulisannya dan tidak berlaku surut. Lihat penjelasanpublishWithAuthorpada Content Type.
Array Allow yang kosong [] berarti mengizinkan aksi pada seluruh jenis tersebut. Karena filternya kosong, tidak ada yang disaring, sehingga aksi itu terbuka untuk semua resource.
Berbeda dari SpaceRole, ServiceUserRole tidak memiliki settings. Peta izin ada empat: contentType, content, media, dan script. Untuk key filter, makna :self, serta cara menyusun peta izin, silakan rujuk juga penjelasan SpaceRole yang menggunakan struktur yang sama. Hanya saja, aksi yang dapat dipakai mengikuti tabel di atas dan berbeda dari SpaceRole. Contoh penggunaan :self untuk mempersempit agar hanya dapat mengedit Content yang dibuat sendiri ditampilkan tepat di bawah pada Peran anggota umum dan peran administrator.
Key filter (
self,contentType,createdBy,tag) dan makna:selfmengacu pada definisi aturan izin di SpaceRole.:selfpada ServiceUserRole diuraikan menjadi hanya yang dibuat oleh ServiceUser saat ini. Daftar aksinya tidak mengikuti SpaceRole, melainkan mengikuti tabel di atas.
Peran anggota umum dan peran administrator
Apakah seorang anggota dapat menangani juga resource anggota lain ditentukan oleh filter createdBy pada aturan. Untuk aksi yang sama pun, jika createdBy diisi :self, aksi itu hanya menyasar apa yang dibuat oleh anggota yang memanggil; jika createdBy tidak dimasukkan, apa yang dibuat anggota lain pun turut menjadi sasaran.
Peran yang diberikan kepada anggota umum membatasi Edit dan Delete dengan :self.
"content": {
"Edit": {
"Allow": [
{
"contentType": { "sys": { "id": "3trmXRLdJF4GBlAjtcuoZ7Pnxj8dlA", "type": "Refer", "targetType": "ContentType" } },
"createdBy": { "sys": { "id": ":self", "type": "Refer", "targetType": "User" } }
}
]
},
"Delete": {
"Allow": [
{
"contentType": { "sys": { "id": "3trmXRLdJF4GBlAjtcuoZ7Pnxj8dlA", "type": "Refer", "targetType": "ContentType" } },
"createdBy": { "sys": { "id": ":self", "type": "Refer", "targetType": "User" } }
}
]
}
}Untuk anggota yang akan berperan sebagai administrator, buatlah peran tersendiri yang menghilangkan createdBy pada aksi yang sama. Berikut adalah peran yang hanya membuka penghapusan hingga ke milik anggota lain, sedangkan penyuntingan tetap dibiarkan terbatas pada milik sendiri.
"content": {
"Edit": {
"Allow": [
{
"contentType": { "sys": { "id": "3trmXRLdJF4GBlAjtcuoZ7Pnxj8dlA", "type": "Refer", "targetType": "ContentType" } },
"createdBy": { "sys": { "id": ":self", "type": "Refer", "targetType": "User" } }
}
]
},
"Delete": {
"Allow": [
{ "contentType": { "sys": { "id": "3trmXRLdJF4GBlAjtcuoZ7Pnxj8dlA", "type": "Refer", "targetType": "ContentType" } } }
]
}
}Peran yang dibuat seperti ini diterapkan hanya kepada satu anggota tersebut dengan menetapkannya pada roleOverride milik ServiceUser. Jika defaultRole pada ServiceLogin diisi dengan peran anggota umum, anggota yang baru mendaftar tidak menerima peran administrator.
Media pun mengikuti cara yang sama. Jika createdBy dihilangkan dari aksi pada peta media, berkas yang diunggah anggota lain pun turut menjadi sasaran. Hanya saja filter contentType hanya dipakai pada peta content, sehingga tidak dimasukkan ke peta media.
script (Izin Script)
script adalah peta izin terhadap Script, dengan struktur yang sama seperti content dan media. Namun, satu-satunya hal yang dapat dilakukan ServiceUser terhadap Script adalah menjalankannya (pembuatan, yaitu membuat/mengedit/menghapus, hanya untuk Weegloo User di CMA). Karena itu, aksi yang dapat dipakai pada script milik ServiceUserRole hanya dua: All dan Execute.
Agar anggota terdaftar dapat menjalankan Script, tuliskan seperti ini:
"script": {
"Execute": { "Allow": [] }
}Filter aturan yang dapat dipakai ada dua: self (satu Script tertentu) dan createdBy. contentType dan tag adalah sumbu yang tidak melekat pada Script, sehingga jika dimasukkan, penyimpanan role ditolak. Untuk mengizinkan anggota menjalankan hanya satu Script tertentu, letakkan aturan self yang menunjuk ke Script itu pada Allow milik Execute.
"script": {
"Execute": {
"Allow": [
{ "self": { "sys": { "id": "3trmXRMZcTAjDnphewjj1AaxYcaxlK", "type": "Refer", "targetType": "Script" } } }
]
}
}Struktur Script itu sendiri beserta endpoint eksekusinya dibahas di Resource dan endpoint Script, sedangkan daftar aksi lengkapnya dibahas di izin script pada SpaceRole.
Error
Berikut adalah kode yang muncul saat Anda menangani ServiceUserRole. Untuk kode yang berlaku umum pada semua resource, lihat Error umum.
| Kode | Kondisi |
|---|---|
WGL400020 | Anda memasukkan filter yang tidak dapat dipakai pada suatu peta izin sehingga penyimpanan ServiceUserRole ditolak. Memasukkan contentType atau tag pada peta script termasuk kasus ini. |
API
Base URL untuk semua endpoint di bawah adalah https://cma.weegloo.com/v1, dan header Authorization memerlukan Bearer token yang mengautentikasi ke CMA. Untuk perubahan peran (PUT, PATCH), Anda harus turut mengirim header X-Weegloo-Version (sys.version resource saat ini) demi kontrol konkurensi optimistis. Pembuatan dan penghapusan tidak memerlukan header ini.
Dokumen terkait
- ServiceUser: anggota terdaftar yang menerima peran ini (
roleOverride). - ServiceLogin: menetapkan ServiceUserRole sebagai peran default (
defaultRole). - SpaceRole: kumpulan izin untuk Weegloo User (struktur peta izin yang sama).
