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 hanya Read.
  • 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" } }).

PropertiTipeDeskripsi
idstringPengenal unik resource.
typestringJenis resource. Untuk ServiceUserRole selalu "ServiceUserRole".
spaceRefer<Space>Space tempat ServiceUserRole ini berada.
createdByRefer<User>Pengguna yang membuat.
createdAtstring (date-time)Waktu pembuatan.
updatedByRefer<User>Pengguna yang terakhir mengubah.
updatedAtstring (date-time)Waktu perubahan terakhir.
versioninteger (≥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 izinAksi yang dapat dipakai
contentTypeAll · Read
contentAll · Create · Read · Edit · Delete
mediaAll · Create · Read · Delete
scriptAll · 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 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. Diisi dengan Refer yang menunjuk ke Content Type.
  • createdBy: membatasi hanya pada resource yang dibuat oleh pengguna tertentu. Jika sys.id diisi 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, publishWithAuthor pada Content Type sasaran harus true. ACDA 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 (anggota menerima resource miliknya sendiri sebagai hasil kosong), dan aturan Deny tidak menyaring siapa pun. Sebaliknya ACMA (pengelolaan) menilai dengan sys.createdBy dari draf sehingga tidak bergantung pada pengaturan ini, jadi aturan yang sama bisa berfungsi di ACMA tetapi meleset di ACDA. publishWithAuthor harus diaktifkan sebelum anggota mengunggah tulisannya dan tidak berlaku surut. Lihat penjelasan publishWithAuthor pada 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 :self mengacu pada definisi aturan izin di SpaceRole. :self pada 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.

KodeKondisi
WGL400020Anda 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.

  • 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).