SpaceRole
SpaceRole ist ein Bündel von Berechtigungen, das einem Mitglied eines Space erteilt wird. Es fasst in einer Ressource zusammen, was mit Content Type, Content und Media getan werden darf (Lesen, Erstellen, Bearbeiten, Löschen, Veröffentlichen), ob Script ausgeführt und verwaltet werden kann und ob auf die Einstellungen des Space zugegriffen werden kann. Filter, die den Berechtigungsumfang einschränken (etwa nur auf einen bestimmten Content Type oder nur auf selbst erstellte Ressourcen), werden ebenfalls innerhalb der SpaceRole festgelegt.
Eine erstellte SpaceRole wird für sich allein noch niemandem zugewiesen. Sie wird einem Mitglied erteilt, indem ein Refer auf diese SpaceRole in das Feld roles der Space Membership eingetragen wird. Ein Mitglied kann mehrere SpaceRole gleichzeitig besitzen. Außerdem wird ein DeliveryAccessToken an genau eine SpaceRole mit den geringstmöglichen Rechten (least-privilege) gebunden, wodurch festgelegt wird, welcher Umfang mit diesem Token ausgeliefert werden kann.
Ressourcenstruktur
Im Folgenden steht die Antwort auf eine Einzelabfrage der SpaceRole "Produkt schreibgeschützt". Neben sys (Systemattribute) enthält sie die Inhaltsattribute contentType, content, media, settings und script, die die Berechtigungen festlegen.
{
"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": "Produkt schreibgeschützt",
"contentType": { "All": { "Allow": [] } },
"content": {
"Read": {
"Allow": [
{ "contentType": { "sys": { "id": "3trmXRLdJF4GBlAjtcuoZ7Pnxj8dlA", "type": "Refer", "targetType": "ContentType" } } }
]
}
},
"media": { "All": { "Allow": [] } },
"settings": [],
"script": {}
}Wichtigste Schlüssel:
contentType: Berechtigungs-Map für den Content Type selbst (das Schema). Die Berechtigungen zum Lesen, Erstellen, Bearbeiten, Löschen und Veröffentlichen eines Content Type werden je Aktion festgelegt.content: Berechtigungs-Map für Content (die Inhaltsdaten). Das obige Beispiel zeigt eine Beschränkung, bei der nur Content eines bestimmten Content Type gelesen werden darf.media: Berechtigungs-Map für Media (Dateien und Bilder).script: Berechtigungs-Map für Script (deklarative Backend-Endpunkte, die vom Frontend aufgerufen werden). Legt Ausführung (Execute) und Verwaltung (Erstellen, Lesen, Bearbeiten, Löschen) je Aktion fest.settings: Ein Array aus Zeichenfolgen, das die Zugriffsberechtigung auf die Einstellungen des Space festlegt. Es ist keine Berechtigungs-Map, sondern führt die Aktionsnamen unmittelbar auf. Vollzugriff ist["SETTING_ALL"], kein Zugriff auf Einstellungen ist[], und es lassen sich auch nur die benötigten Einstellungen auswählen (siehesettingsunten).isLocked: Beitruehandelt es sich um eine von Weegloo standardmäßig bereitgestellte Rolle (etwa Administrator), die nicht geändert oder gelöscht werden kann.
Systemattribute (sys)
Jede SpaceRole fasst gemeinsame Systemattribute im Objekt sys zusammen. space, createdBy und updatedBy werden in der Refer-Form ({ "sys": { "id", "type": "Refer", "targetType" } }) eingetragen.
| Attribut | Typ | Beschreibung |
|---|---|---|
id | string | Eindeutige Kennung der Ressource. |
type | string | Art der Ressource. Bei SpaceRole immer "SpaceRole". |
space | Refer<Space> | Der Space, zu dem diese SpaceRole gehört. |
createdBy | Refer<User> | Der Benutzer, der die Ressource erstellt hat. |
createdAt | string (date-time) | Zeitpunkt der Erstellung. |
updatedBy | Refer<User> | Der Benutzer, der die Ressource zuletzt geändert hat. |
updatedAt | string (date-time) | Zeitpunkt der letzten Änderung. |
isLocked | boolean | Bei true handelt es sich um eine standardmäßig bereitgestellte Rolle, die nicht geändert oder gelöscht werden kann. Selbst erstellte Rollen sind false. |
version | integer (≥1) | Version der Ressource. Erhöht sich bei jeder Änderung um 1. |
SpaceRole ist eine Einstellungsressource ohne Veröffentlichungskonzept. Anders als bei Content und Media enthält sys daher kein publish, archive oder status, sondern nur version. Die version erhöht sich bei jeder Änderung der SpaceRole.
Berechtigungs-Maps: contentType, content, media
contentType, content und media sind jeweils Maps, deren Schlüssel Aktionen sind. Die verwendbaren Aktionen sind Create (Erstellen), Read (Lesen), Edit (Bearbeiten), Delete (Löschen), Publish (Veröffentlichen), Unpublish (Veröffentlichung zurücknehmen), Archive (Archivieren) und Unarchive (Archivierung aufheben); zusätzlich gibt es All, das alle Aktionen auf einmal abdeckt. Eine Aktion namens Save gibt es nicht. Die Berechtigung zum Ändern heißt Edit, und Save ist der Name eines Ereignisses, das ein Webhook abonniert. Der Wert jeder Aktion ist ein Objekt, das Regel-Arrays für Allow (Erlauben) und Deny (Verweigern) enthält.
"content": {
"Read": { "Allow": [ /* Regel */ ], "Deny": [ /* Regel */ ] },
"Edit": { "Allow": [ /* Regel */ ] }
}Jedes Regelobjekt (rule) hat optionale Filter, die den Berechtigungsumfang einschränken.
self: Beschränkt das Ziel, auf das die Regel angewendet wird, auf die Ressource selbst. Hier wird einRefereingetragen, das auf die Zielressource verweist. In dercontentType-Map bedeutet es genau einen bestimmten Content Type, in derscript-Map genau ein bestimmtes Script.contentType: Beschränkt auf den Content Type, zu dem dieser Content gehört. Hier wird einRefereingetragen, das auf den Content Type verweist.createdBy: Beschränkt auf Ressourcen, die von einem bestimmten Benutzer erstellt wurden. Wird insys.iddie Kennung eines bestimmten Benutzers eingetragen, gilt die Regel nur für dessen Ressourcen; mit dem reservierten Wert:selfgilt sie nur für Ressourcen, die der aktuell aufrufende Benutzer erstellt hat.tag: Beschränkt auf Ressourcen, die mit einem bestimmten Tag versehen sind.
Welcher Filter in welcher Berechtigungs-Map eine Bedeutung hat, ist festgelegt. Tragen Sie einen unpassenden Filter ein, wird das Speichern der Rolle abgelehnt. Denn würde er stillschweigend ignoriert, wäre eine Regel, die Sie für eingeschränkt hielten, eine vollständige Erlaubnis.
| Berechtigungs-Map | Verwendbare Filter | Filter, deren Eintrag das Speichern verhindert |
|---|---|---|
contentType | self (dieser Content Type selbst), createdBy | contentType |
content | contentType (die Art, zu der dieser Content gehört), createdBy, tag | self |
media | createdBy, tag | self |
script | self (dieses Script selbst), createdBy | contentType, tag |
- Das Ziel der
contentType-Map geben Sie nicht mitcontentType, sondern mitselfan. Denn es geht darum, den Content Type selbst einzuschränken. DercontentType-Filter bedeutet „die Art, auf die diese Ressource verweist", und passt daher nur zurcontent-Map. - Ein Filter, der über eine Achse einschränken will, die es bei dieser Ressource nicht gibt (
tagbei einem Content Type,contentTypebei einem Media), wird zwar beim Speichern nicht blockiert, aber die Regel wird nicht wie beabsichtigt ausgewertet. Verwenden Sie ihn nicht.
Wenn Sie den
createdBy-Filter (einschließlich:self) über CDA (Auslieferung) auswerten, musspublishWithAuthordes betreffenden Content Typetruesein. CDA wertet diesen Filter anhand vonsys.createdByim Veröffentlichungs-Snapshot aus; istpublishWithAuthorder Standardwertfalse, enthält der Snapshot keine Autoreninformationen, sodass dieAllow-Regel nichts trifft und dieDeny-Regel niemanden herausfiltert. CMA (Verwaltung) wertet anhand vonsys.createdBydes Entwurfs aus und ist daher von dieser Einstellung unabhängig.publishWithAuthorwirkt nicht rückwirkend, muss also eingeschaltet werden, bevor der Inhalt veröffentlicht wird, und ein bereits veröffentlichter Content muss erneut veröffentlicht werden. Siehe die Beschreibung vonpublishWithAuthorbei Content Type.
Ein leeres Allow-Array [] bedeutet, dass die Aktion für die gesamte jeweilige Art erlaubt ist. Da der Filter leer ist, gibt es nichts zu filtern, und die Aktion ist für alle Ressourcen geöffnet.
Ein leeres Deny-Array [] verhält sich umgekehrt. Es bedeutet nicht „nichts wird verweigert", sondern verweigert die gesamte jeweilige Art und blockiert die Aktion damit vollständig. Auch wenn Sie zusätzlich ein Allow angeben, bleibt sie blockiert. Setzen Sie [] in der Annahme, es gebe nichts zu verweigern, tritt genau das Gegenteil ein. Wenn Sie also nichts verweigern wollen, tragen Sie den Schlüssel Deny gar nicht ein.
Beispiel 1: Administrator (Vollzugriff, standardmäßig bereitgestellt)
Die Rolle Administrator erlaubt mit einem leeren Allow auf der Aktion All für contentType, content, media und script jeweils den vollständigen Zugriff und gewährt mit ["SETTING_ALL"] in settings den Zugriff auf sämtliche Einstellungen des Space. Da Weegloo diese Rolle standardmäßig bereitstellt, ist sys.isLocked gleich true und die Rolle kann nicht geändert oder gelöscht werden.
{
"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": [] } }
}Beispiel 2: Schreibgeschützt (nur ein bestimmter Content Type)
Ein Beispiel für eine selbst erstellte least-privilege-Rolle. Es wird nur auf der Aktion Read von content eine Regel gesetzt, und über den Filter contentType dieser Regel wird sie auf genau einen bestimmten Content Type beschränkt. Der Content Type selbst und Media sind mit einem leeren Allow auf All geöffnet, doch bei den Inhaltsdaten ist nur das Lesen dieser einen Art möglich. Da settings gleich [] ist, besteht kein Zugriff auf die Einstellungen des Space. Wird eine solche Rolle an ein DeliveryAccessToken gebunden, liest das Auslieferungs-Token nur diesen Umfang. Das JSON dieser Rolle entspricht der "Produkt schreibgeschützt" aus der obigen Ressourcenstruktur.
settings (Zugriff auf Space-Einstellungen)
settings ist keine Berechtigungs-Map, sondern ein Array aus Zeichenfolgen. Es enthält die Zugriffsberechtigung auf die Einstellungen des Space und kennt weder Allow/Deny noch Filter. Die Aktionen, die im Array stehen, sind erlaubt; die Aktionen, die nicht darin stehen, sind nicht erlaubt.
Vollzugriff ist ["SETTING_ALL"], kein Zugriff wird mit [] ausgedrückt. Wird etwas dazwischen benötigt, wählen Sie aus den folgenden Aktionen aus.
| Aktion | Worauf sie Zugriff gewährt |
|---|---|
SETTING_GENERAL | Der Space selbst (Name, Beschreibung und Ähnliches) |
SETTING_LOCALE | Locale |
SETTING_WEBHOOK | Webhook (einschließlich Aufrufverlauf und Status) |
SETTING_APP | Installation von Market App |
SETTING_TAG | Tag |
SETTING_DELIVERY_ACCESS_TOKEN | Delivery Access Token |
SETTING_SPACE_ACCESS_TOKEN | Space Access Token |
SETTING_USER | Space Membership (Zuweisung von Mitgliedern) |
SETTING_ROLE | SpaceRole |
SETTING_WEB_HOSTING | Web Hosting und benutzerdefinierte Domains |
SETTING_SERVICE_LOGIN | ServiceLogin, ServiceUser, ServiceUserRole |
SETTING_EMAIL_ACCOUNT | Das Konto für den E-Mail-Versand |
SETTING_MONITORING | Einsicht in Nutzung und Kennzahlen |
SETTING_SCHEDULER | Scheduler und dessen Ausführungsprotokolle |
SETTING_ALL | Alles oben Genannte |
Für die beiden Tokenarten sind die Aktionen getrennt. Wird nur SETTING_DELIVERY_ACCESS_TOKEN erteilt, lässt sich ein schreibgeschütztes Delivery Access Token ausstellen, ein Space Access Token, das auch schreiben kann, jedoch nicht.
Die Aktionen aus settings werden nur mit einer Konsolen-Login-Sitzung und einem Personal Access Token aufgerufen. Ein Space Access Token, ein Delivery Access Token oder ein ServiceUser-Token kann die APIs dieser Liste nicht aufrufen, gleichgültig welche Aktionen in der Rolle eingetragen sind.
Die Aktionsliste der Berechtigungs-Maps (
contentType,content,media,script), die Filterschlüssel (self,contentType,createdBy,tag), die Bedeutung von:selfund die Frage, welcher Filter in welcher Map gültig ist, richten sich nach dem obigen Abschnitt Berechtigungs-Maps: contentType, content, media.
script (Script-Berechtigungen)
script ist die Berechtigungs-Map für Script (deklarative Backend-Endpunkte, die vom Frontend aufgerufen werden). Ihr Aufbau entspricht dem von content und media: Aktionen als Schlüssel und Allow/Deny-Regel-Arrays als Werte. Verwendet werden folgende Aktionen:
Create,Read,Edit,Delete: Erstellen, Lesen, Bearbeiten und Löschen einer Script-Ressource.Execute: Ein Script ausführen (Aufruf von/execute). Diese Aktion ist spezifisch für Script.All: Die übergeordnete Aktion, die alle oben genannten umfasst.
Da ein Script keine Ressource ist, die veröffentlicht wird, werden Veröffentlichungsaktionen wie Publish/Unpublish nicht verwendet. Als Regelfilter lassen sich self und createdBy verwenden.
self: Beschränkt auf genau ein bestimmtes Script. Hier wird einReferauf dieses Script eingetragen (targetTypeistScript).createdBy: Beschränkt auf den Ersteller (mit:selfauf "nur die selbst erstellten Script").
contentType und tag sind keine Achsen, die an einem Script hängen, daher wird das Speichern der Rolle bei ihrem Eintrag abgelehnt.
Um beispielsweise die Ausführung beliebiger Script zu erlauben, das Lesen jedoch auf die selbst erstellten zu beschränken:
"script": {
"Execute": { "Allow": [] },
"Read": {
"Allow": [
{ "createdBy": { "sys": { "id": ":self", "type": "Refer", "targetType": "User" } } }
]
}
}Mit self eingeschränkt, ergibt sich die minimale Berechtigung, mit der sich nur ein einziges Script ausführen lässt. Wenn Sie einem externen System wie einem Zahlungsdienstleister Ausführungsrechte geben, ist das der Weg, nur die eine Anlaufstelle zu öffnen, die dieses System aufrufen wird, und alles Übrige geschlossen zu halten.
"script": {
"Execute": {
"Allow": [
{ "self": { "sys": { "id": "3trmXRMZcTAjDnphewjj1AaxYcaxlK", "type": "Refer", "targetType": "Script" } } }
]
}
}Binden Sie diese Rolle an ein Space Access Token, lässt sich mit diesem Token nur das angegebene Script ausführen. Warum man auf ein einzelnes Ausführungsrecht einschränkt und dass eine Script-Ausführung die Berechtigungen des Autors delegiert bekommt, wird unter Script-Ausführungssemantik, Einschränkungen und Sicherheit behandelt.
Diese script-Berechtigung legt fest, ob die Script-Ressource ausgeführt und verwaltet werden darf. Davon unabhängig gilt: Beim Verfassen eines Script (Erstellen oder Bearbeiten) muss der Autor zum Speicherzeitpunkt tatsächlich die Content-/Media-Aktionsberechtigungen besitzen, auf die sich die Statements des Script beziehen; andernfalls wird das Speichern abgelehnt (siehe Fehler bei Script). Näheres dazu unter Script-Ausführungssemantik, Einschränkungen und Sicherheit.
Fehler
Dies sind die Codes, die beim Umgang mit einer SpaceRole auftreten. Codes, die allen Ressourcen gemeinsam sind, finden Sie unter Gemeinsame Fehler.
| Code | Bedingung |
|---|---|
WGL400020 | Der Aufrufer wollte eine SpaceRole speichern, obwohl in einer Regel ein Filter stand, der in der betreffenden Berechtigungs-Map keine Bedeutung hat. |
API
Die Basis-URL aller folgenden Endpunkte ist https://cma.weegloo.com/v1, und im Header Authorization ist ein Bearer-Token erforderlich, das gegen CMA authentifiziert. Beim Ändern einer Rolle (PUT, PATCH) muss für die optimistische Nebenläufigkeitskontrolle zusätzlich der Header X-Weegloo-Version (die aktuelle sys.version der Ressource) gesendet werden. Beim Erstellen und Löschen entfällt dieser Header. Standardmäßig bereitgestellte Rollen mit sys.isLocked gleich true können nicht geändert oder gelöscht werden.
Verwandte Dokumente
- Space Membership: Bindet eine SpaceRole an die
roleseines Mitglieds. - Delivery Access Token: Auslieferungs-Token, das an eine least-privilege-SpaceRole gebunden wird.
- Content Type: Der Content Type, auf den die Berechtigungsregeln verweisen.
