Einleitung / Rechte in FirstSpirit / Benutzerrechte / Auswertung der Benutzerrechte per API

Auswertung der Benutzerrechte über die FirstSpirit-API

Inhaltsverzeichnis

Eine Auswertung der Benutzerrechte ist auch über die FirstSpirit-API möglich.

Schnittstellen (FirstSpirit Access API)

Der API-Zugriff erfolgt über das Objekt Permissions. Das Objekt liefert die Rechte zurück, die auf dem aktuellen FirstSpirit-Objekt definiert wurden.

FirstSpirit Access API Interface: de.espirit.firstspirit.access.editor.value.Permissions

FirstSpirit Access API Dokumentation: Permissions

Einschränkungen bei der Auswertung über die API

Während eine Auswertung, die über die Vorlagensyntax angestoßen wird, die Vererbungshierchie der Benutzerrechte automatisch berücksichtigt, ist das bei einer Auswertung über die FirstSpirit-API nicht der Fall.

Vererbte Rechte werden nicht berücksichtigt

Zur Erinnerung: Benutzerrechte gelten immer für das Objekt im Baum, für das sie definiert wurden und werden an alle Objekte vererbt, die diesem Objekt innerhalb der Baumstruktur untergeordnet sind. Das bedeutet: Wenn in einem Baum-Objekt keine Benutzerrechte definiert sind, so gelten die Rechte des übergeordneten Objekts. Durch diese Vererbungsdefinition ist es einfach möglich, z. B. auf der Ebene eines Ordners oder des Wurzelknotens, Rechte für alle darunter liegenden Seiten zu definieren.

Beispiel

Struktur Sitestore-Root, Rechtedefinition und Vererbung der Rechte:

  • Store-Root (Rechtedefinition in den Metadaten über CMS_INPUT_PERMISSION)
    Definiert: Anonyme Besucher („erlaubt“)
    Definiert: Registrierte Mitglieder („erlaubt“)
    • Sitestore-Ordner (Rechtedefinition in den Metadaten über CMS_INPUT_PERMISSION)
      Definiert: Anonyme Besucher („verboten“)
      Definiert: Registrierte Mitglieder („erlaubt“)
      • Seitenreferenz (keine Rechtedefinition - Rechte werden über den Ordner geerbt)
        Geerbt: Anonyme Besucher („verboten“)
        Geerbt: Registrierte Mitglieder („erlaubt“)

Groups.xml:

<GROUPS id="GroupsFile" name="GroupsFile" version="1">
<GROUP id=anonymous" name="Anonyme Besucher"/>
<GROUP id="member" name="Registrierte Mitglieder"/>
</GROUP>

Auswertung über die Vorlagensyntax

Der Aufruf #global.node im Ausgabekanal der Vorlage liefert das aktuelle Objekt (z. B. die Seite) zurück. Anschließend können über .meta() die Metadaten des aktuellen Objekts geholt werden (siehe Metainformationen (→Online Dokumentation FirstSpirit)).

Die folgende Ausgabe der Benutzerrechte in der Metadatenvorlage (mit der expliziten Angabe, geerbte Rechte („inherit“) zu verwenden):

$CMS_SET(currPerm, #global.node.meta("perms", "inherit"))$
$CMS_VALUE(currPerm.getForbidden("").toString(","))$
$CMS_VALUE(currPerm.getAllowed("").toString(","))$

Liefert für den Ordner diese Werte(*):

anonymous
member

Und für die Seitenreferenz diese Werte(*):

anonymous
member

(*) Es wird hier die ID der Gruppe aus der Standard-Konfigurationsdatei groups.xml zurückgeliefert, nicht der Name der Gruppe (siehe oben). 

Ausgehend von der Seite wird über die Abfrage #global.node.meta(...) automatisch geprüft, ob auf der Seite Rechte definiert oder ob Rechte von einem übergeordneten Knoten (hier: vom Ordner) geerbt wurden.

Auswertung über die FirstSpirit API

Bei der Auswertung über die API ist das nicht der Fall. Sind die Benutzerrechte für das Objekt nicht explizit gesetzt („allowed“ bzw. „forbidden“), sondern lediglich „inherited“ - also von einem übergeordneten Knoten geerbt, liefert das Objekt Permissions eine leere Liste zurück.

Gruppen, für die keine Rechte definiert wurden, werden generell als verboten interpretiert.

Für das Beispiel bedeutet dies: Die Ausgabe von

<IDProvider>.getMetaFormData().get(null,"perms").get().getForbidden("");
<IDProvider>.getMetaFormData().get(null,"perms").get().getAllowed("");

über die Beanshell-Konsole liefert für den Ordner die folgenden Werte (*) - da die Rechte auf dem Ordner explizit gesetzt wurden:

anonymous
member

aber für die Seitenreferenz nur eine leere Liste, da beide Rechte nur über den Ordner geerbt wurden:

(*) Es wird hier die ID der Gruppe aus der Standard-Konfigurationsdatei groups.xml zurückgeliefert, nicht der Name der Gruppe (siehe oben). 

Wichtig Dieses Verhalten muss bei der Auswertung über die API berücksichtigt werden. Grundsätzlich sollte hier vor der Abfrage der Inhalte geprüft werden, ob auf diesem Element Metadaten definiert sind und ob diese Rechte dort gesetzt oder vererbt wurden.

Über die Abfrage:

(<IDProvider>.hasMeta() && !<IDProvider>.getMetaFormData().get(null,<Name der Eingabekomponente>).get().isInherited())

wird geprüft, ob ein Objekt Metadaten besitzt (.hasMeta()) und zusätzlich, ob es Benutzerrechte durch geerbte Metadaten besitzt.

Liefert diese Abfrage false zurück, dann erhält man die Benutzerrechte für dieses Element über den nächstliegenden Elternknoten, der für diese Abfrage den Wert true zurückliefert (in diesem Fall über den Ordner, oder falls dort ebenfalls keine Rechte definiert wären über den Store-Root).

© 2005 - 2021 e-Spirit AG | Alle Rechte vorbehalten. | FirstSpirit 2021-02 | Datenschutz | Impressum | Kontakt