http://onionworks.net/2006/data/application

setRight (groupReference : xlink, target : xlink, type : string, objectflags : string, [childrenflags : string]) : boolean

Mit der Methode setRight können Objektrechte für eine Gruppe angelegt oder bearbeitet werden.

Der Parameter groupReference gibt die Gruppe an, in der die Berechtigungen für ein Objekt angepasst werden sollen. Es wird ein XLink erwartet der ID der Gruppe erwartet.

Mit dem Parameter target wird über den XLink das Datenobjekt spezifiert, für das die Rechte gesetzt oder geändert werden sollen.

Der type gibt an, ob eine Berechtigung oder ein Verbot gesetzt werden soll. Mögliche Werte für type sind:

  • set: Die angegebenen Flags für das Objekt und die Kinder werden als Permission gesetzt (in der Benutzerverwaltung durch den grünen Haken symbolisiert).
  • clear: Die angegebenen Flags für das Objekt und die Kinder werden als Restriction gesetzt (in der Benutzerverwaltung durch das rote X symbolisiert).
  • inherit:

Wichtig: Grundsätzlich werden nicht angegebene Flags nicht verändert! Werden durch die Methode also bspw. Kindrechte gesetzt bei einer bereits bestehenden Regel, bei der die Objektrechte schon gesetzt sind, werden die Objektrechte nicht verändert.

Mit den Parametern objectflags und childrenflags schließlich wird angegeben welche Berechtigungen gemäß dem type gesetzt werden sollen. Folgende Werte sind dabei möglich.
objectflags: r (read) m (modify) d (delete)
childrenflags: c (create children) r (read children) m (modify children) d (delete children) l (list children)

Jedes Flag entspricht dabei einer Rechtespalte in der Benutzerverwaltung. Über das Attribut type kann dabei wie gesagt gesteuert werden, ob eine Erlaubnis (grüner Haken) oder ein Verbot (rotes X) gesetzt wird.

Verwenden von "set"

<xsl:stylesheet xmlns:app="http://onionworks.net/2006/data/application" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:onion="http://onionworks.net/2004/data" version="1.0">
<xsl:template match="/">
<xsl:variable name="group" select="app:createGroup('testgroup')" />
<xsl:if test="app:setRight($group, 'onion://data/objects/1', 'set', 'r', 'rl')"> Die Gruppe darf nun alle Dokumente unterhalb des Systemroots lesen. </xsl:if>
</xsl:template>
</xsl:stylesheet>
Rechte setzen

Das obige Beispiel legt eine Gruppe namens "testgroup" an und setzt einige Rechte. Das Ergebnis ist folgendes:

Verwenden von "clear"

Die folgende Zeile erweitert die gesetzten Rechte.

<xsl:if test="app:setRight($group, 'onion://data/objects/1', 'clear', 'd', 'cm')">Die Gruppe darf nun explizit das Objekt nicht bearbeiten und keine Kinder darunter anlegen oder bearbeiten.</xsl:if>
Vorhandene Berechtigungen um Verbote erweitern

Im ersten Beispiel wurden bereits Berechtigungen gesetzt. Die Objektrechte werden nun um drei explizite Verbote erweitert. Da die Rechtespalten aus dem ersten Beispiel in diesem nicht angegeben sind, bleiben sie unverändert. Das Ergebnis ist folgendes:

Verwenden von "inherit"

Um die Funktionsweise von inherit zu erklären nehmen wir nun an, unsere Testgruppe umfasst alle Rechte einer anderen Gruppe. Diese hat ebenfalls bereits bestimmte Berechtigungen für das Objekt Systemroot:

Wir wenden nun in der folgenden Zeile auf dieselben Spalten, bei denen wir eben ein Verbot gesetzt haben, den type "inherit" an. Zusätzlich geben wir noch die Spalte "Objekt lesen" an.

<xsl:if test="app:setRight($group, 'onion://data/objects/1', 'clear', 'rd', 'cm')">Die Gruppe erbt nun so weit wie möglich die Berechtigungen.</xsl:if>
Rechte erben

Die Berechtigungen in unserer "testgroup" sehen nun folgendermaßen aus:

Die Berechtigungen für "Object: read, delete" sowie "Children: create, modify" sollen aus der geerbten Gruppe abgeleitet werden. Für die Objektberechtigungen (read und delete) hat diese Gruppe keine Rechte gesetzt. Daher verschwinden auch in unserer "testgroup" die dortigen Berechtigungen (Erlaubnis und Verbot). Indem die explizit gesetzten Berechtigungen entfernt werden, wird der Weg frei, Rechte oder Verbote einer ggf. weiteren übergeordneten Gruppe, von der unsere "Obergruppe" erbt (bspw. Users) zu übernehmen.

Bei den Kinderberechtigungen, die wir erben wollen (create und modify), gibt es zwei Fälle.

1. create
Hier hat die übergeordnete Gruppe das Erlaubnisflag gesetzt, in unserer "testgroup" wurde ein explizites Verbot gesetzt. Das Verbot wird entfernt, wodurch wir die explizite Berechtigung erben.

2. modify
Die übergeordnete Gruppe hat hier keine explizite Berechtigung, unsere "testgroup" wiederum ein explizites Verbot. Auch hier wird das explizite Verbot entfernt, um eventuelle noch weiter übergeordnete Berechtigungen durch zu reichen.