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)"
        ...
WARNUNG: Wenn Sie einen neuen Endpunkt erstellen, der eine benutzerdefinierte Aktion ausführt, dürfen Sie den Endpunkt nicht mit einem Namen benennen, der im Konflikt mit einer Basisberechtigung stehen würde, z. B. 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)")

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"