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“)
- Seitenreferenz (keine Rechtedefinition - Rechte werden über den Ordner geerbt)
- Sitestore-Ordner (Rechtedefinition in den Metadaten über CMS_INPUT_PERMISSION)
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).
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).