Gastbereiche im XWiki einrichten

3. März 2011


 

Das XWiki erlaubt viele detaillierte Einstellungen in den Zugriffsrechten; gelegentlich ergeben sich aber Spezialanforderungen, wie etwa die Anforderung einer „Gäste“-Gruppe, die nur einen speziellen Bereich sehen darf, und nicht die „normale“ Startseite.

Dies lässt sich zum Beispiel so realisieren, dass eine „Gäste“-Gruppe (z.B. „XWikiGastGruppe“) angelegt wird. Gastnutzer werden dann dieser Gruppe zugewiesen.
Sodann wird dieser Gruppe im ganzen Wiki das „Ansehen“-recht entzogen, und nur in dem speziellen „Gast“-Bereich zugeteilt.(Achtung: In diesem Bereich sollte auch der „XWikiAllGroup“ das „Ansehen“-Recht vergeben werden, sonst werden die normalen Nutzer ausgeschlossen.)

Leider hat dies einen kleinen Haken: Wenn sich die Gäste einloggen, werden sie erst einmal mit einer rüden Meldung begrüsst:
Fehler: Sie sind zur Anzeige dieses Dokuments oder zur Ausführung dieser Aktion nicht berechtigt.“
weil sie ja kein Recht haben, die normale Startseite zu sehen.

Dies lässt sich aber auch mit Bordmitteln beheben.

Die Idee ist es, im „Kopfbereich“ der Seite zu testen, ob der Nutzer überhaupt berechtigt ist, eine Seite zu sehen, und wenn dies nicht der Fall ist, wird vermutet, dass der Nutzer ein Gast ist, und daher in den Gastbereich weitergeleitet.

Nun muss man wissen, wie der Kopfbereich normalerweise aussieht, bevor dieser überschreiben wird. Dieser Bereich befindet sich in einer Datei mit dem Namen header.vm auf dem Dateisystem. Der genaue Ort hängt dabei von dem verwendete Skin ab; für den (per default aktivierten) „Colibri“-skin findet sich die Datei im Orginal in skins/colibri/header.vm und hat folgenden Inhalt:


###
### Document headers
###
### Contains the global and space zones
###
#template("global.vm")

Da die Zeilen, die mit ### anfangen, Kommentare sind, reduziert sich also der eigentliche Inhalt auf eine Zeile, welche auch in die angepassten Version übernommen wird. Zuvor wird aber die Überprüfung eingeschleust.

Um die Anpassung des Kopfbereiches vorzunehmen, wird im Browser zu der Seite XWiki.DefaultSkin gewechselt, und dort der Objekte-editor geöffnet.
Dort sollte genau ein Objekt der Klasse „XWiki.XWikiSkin“ vorhanden sein; dieses Objekt öffnen und in das Textfeld „Header“ folgenden Text einfügen:


#set($guestHome="Gastbereich.WebHome")
#if(!$xwiki.checkAccess($doc.fullName, "view"))
#set($sc_home=$xwiki.getDocument($guestHome))
#if(!$sc_home.isNew() && $xwiki.checkAccess($guestHome,"view"))
 $response.sendRedirect($sc_home.getURL('view'))
#end
#end
#template("global.vm") 

Das $guestHome="..." in der ersten Zeile anpassen, einmal speichern, und fertig ist die Anpassung.

Die Weiterleitung schlägt dann zu, wenn der Nutzer eine Seite besucht, die dieser nicht ansehen darf, aber die „Gastseite“ existiert und angesehen werden darf. Bevor die Fehlerseite angezeigt wird, ist der Browser schon bei der nächsten Seite. (Der extra Test, ob die Gastseite ansehbar ist, verhindert Endlosschleifen im Browser, falls etwas mit den Zugriffsrechten falsch eingerichtet ist.)

Nun lässt sich die Startseite ohne Probleme für die Gast-gruppe sperren; nach dem Login gibt es dann nicht etwa eine Fehlermeldung, sondern die Gäste werden reibungslos in ihren Gastbereich geleitet.