Ressourcenberechtigungen
Sowohl Einzelelementressourcen (z. B. Activity) als auch Sammelressourcen (z. B. Activities) können über einen Abschnitt permissions verfügen. In diesem Abschnitt werden die Aktionen definiert, die Benutzer für zugängliche Ressourcen ausführen können.
Der Abschnitt permissions besteht aus einer Liste von Berechtigungen, auf die jeweils ein boolescher Ausdruck folgt. Die Berechtigung wird nur dann gewährt, wenn der boolesche Ausdruck „true“ zurückgibt.
Der folgende Code definiert beispielsweise die Berechtigungen für die Ressource Account (für eine Einzelkontenressource), wie sie in der Datei accountholder_core-1.0access.yaml deklariert ist. Die Berechtigung view wird gewährt, wenn einer der Gosu-Ausdrücke „true“ zurückgibt. Die Berechtigung freeze wird niemals gewährt.
Account:
permissions:
view: "gw.rest.core.pc.security.v1.AccountHolderSecurityUtil.
canAccessAccount(resource.Account) || resource.Account.New"
freeze: false
purge: false
unfreeze: false
Berechtigungen für Elementressourcen
Für einzelne Elemente können Sie die Berechtigungen view, create, edit und delete angeben. Sie können auch Berechtigungen für benutzerdefinierte Geschäftsaktionen angeben. Wenn es beispielsweise einen POST-Endpunkt /activities/{activityId}/assign gibt, können Sie für eine Activity-Ressource eine Berechtigung assign angeben. Bei benutzerdefinierten Aktionen muss der Berechtigungsname mit dem am Ende des Endpunktpfads verwendeten Verb übereinstimmen.
Im Folgenden werden beispielsweise Berechtigungen für die Entität Job angegeben. Beachten Sie, dass die Standardberechtigungen view und edit sowie die benutzerdefinierte Geschäftsaktionsberechtigung quote angegeben werden.
Job:
permissions:
view: "gw.rest.core.pc.security.v1.AccountHolderSecurityUtil.canView(resource.Job)"
edit: "gw.rest.core.pc.security.v1.AccountHolderSecurityUtil.canEdit(resource.Job)"
...
quote: "gw.rest.core.pc.security.v1.AccountHolderSecurityUtil.canQuote(resource.Job)"
...
view, edit, create oder delete. Dies würde unerwartetes Berechtigungsverhalten zur Folge haben.Wenn in einer Zugriffsdatei keine bestimmte Berechtigung angegeben ist, wird standardmäßig die Berechtigung des übergeordneten Elements der Ressource verwendet. Wenn eine bestimmte Ressource keinen Berechtigungsabschnitt aufweist, werden alle Berechtigungen standardmäßig auf die Berechtigung des übergeordneten Elements der Ressource gesetzt.
Mögliche boolesche Ausdrücke
Jeder Gosu-Ausdruck, der „true“ oder „false“ zurückgibt, kann als boolescher Ausdruck einer Berechtigung verwendet werden.
Für Berechtigungen umfasst die Basiskonfiguration die folgenden Arten von booleschen Ausdrücken:
- Einen booleschen Wert
- Das Schlüsselwort
__inherit(in diesem Fall wird die Berechtigung vom übergeordneten Element der Ressource geerbt, z. B.AccountActivities...view: __inherit) - Einen Gosu-Ausdruck einschließlich:
- Einen Perm-Ausdruck im Gosu-System (z. B.
"perm.system.actview") - Perm-Ausdrücke für eine Gosu-Ressource (z. B.
"perm.Activity.view(resource.Activity)") - Einen Gosu-Ausdruck (z. B.
"!resource.Note.Confidential || resource.Note.Author == entity.User.util.CurrentUser || perm.Claim.viewvertraualnotes(resource.Note.Claim)") - Eine Gosu-Methode, die auf der System-API-Ebene deklariert wird (z. B.
"gw.rest.core.pl.util.v1.ActivityInternalPermissionUtil.canApprove(resource.Activity)")
- Einen Perm-Ausdruck im Gosu-System (z. B.
Weitere Informationen zum Schreiben von Gosu-Ausdrücken, die nach System- oder Ressourcenberechtigungen suchen, finden Sie im Regelhandbuch.
In einigen Fällen sind mehrere Ausdrücke in mehreren Zeilen aufgeführt, wie im folgenden Beispiel. In diesem Fall werde die Ausdrücke mit AND verknüpft. Alle Ausdrücke müssen „true“ zurückgeben, damit die Berechtigung gewährt wird.
Account:
permissions:
purge:
- "perm.Account.edit(resource.Account)"
- "perm.System.purge"