Tags:
create new tag
, view all tags

CQ5 User und Gruppen

Aktuelles

  • Go-Live auf Ende November 2012 verschoben
  • User und Gruppen können defnitiv nicht umbenannt werden
    • diese Einschränkung beruht auf der JCR-Spezifikation
  • Gruppen und User müssen gelöscht und neu erstellt werden
  • alle Berechtigungen verschwinden
  • alle Berechtigungs-Gruppen müssen in CQ separat erstellt und verwaltet werden

ToDo

  • TODO Perl-Module zur Verwaltung von User und Gruppen in CQ
    • Processing CQ.pm - Grundmodul für alle Verbindungen und die meisten Methoden
    • Processing CQ::User - für User-Objekte spezialisiert
    • Processing CQ::Group - für Gruppen-Objekte spezialisiert
    • Processing Nethz::CQ::User - Grundmodul für alle Businessprozesse, nethz-Integration
      • new_for_uname
      • update_for_uname
      • intermediatePath für Userobjekte festlegen
    • Processing Nethz::CQ::Group - ditto für Gruppen
      • new_for_ngroup
      • update_for_ngroup
      • intermediatePath für Gruppenobjekte festlegen
    • Processing Nethz::CQ
      • Konfiguration auslesen
      • CQ::setup durchführen
      • set_email überprüft Validitüt der E-Mail-Adresse
  • TODO CMS-Service für alle Mitarbeiter, Studenten, Dozenten, ETH-nahe, ETH-Gäs
  • eigenstündiger Service, weil
    • Service abhängig von der Existenz einer E-Mail-Adresse
    • E-Mail ist principalName in CQ
    • nicht alle Leute mit nethz-Service benötigen zwingend einen CQ-User
    • theoretisch wäre es mindestens denkbar, dassauch das Passwort
    • gesetztwerden könnte (falss Login ohne Shibboleth)
    • Account auf einem fremden System = eigener nethz-Service (Grundsatz)
  • TODO Abhängigkeit von nethz-Service (LDAPS-Eintrag) und einerregistrierten E-Mail-Adresse
  • TODO Änderung der Mailadresse bewirkt Änderung des CQ-Accounts
    • TODO Trigger auf E-Mail-Tabelle führt zu einem Eintrag in SYNC_UNAME
    • TODO
  • TODO Zusätzliches Häckchen [x] Export CMS im Gruppen-Tool
    • SYNC_NGROUP-Eintrag
    • Verschiedene Müglichkeiten, weshalb eine x-beliebige Gruppe exportiert wird:
    1. dieser Gruppentyp wird sowieso immer exportiert (alle LZ- und Studenten-Usergruppen)
    2. diese Gruppe ist manuell zum Export markiert worden (Custom-Gruppen)
    3. diese Gruppe ist Teil einer anderen Gruppe, die exportiert wird (am besten einen Zähler einführen, der immer um 1 addiert wird, sobald diese Gruppe als Untergruppe einer zu exportierenden Gruppe hinzugefügt wird. Wenn die Gruppe nicht mehr exportiert wird oder die Untergruppe entfernt wird, Zähler auf der Untergruppe -1. Bei einem positiven Zähler wird die Gruppe immer exportiert. Zähler sollte nicht weniger 0 betragen. Nicht unnötigerweise berechnen, ob Gruppe immer noch benötigt wird oder nicht, einfach Zähler setzen Trigger auf diesen Zähler definieren, der einen Eintrag in SYNC_GROUP macht.
  • TODO Datenbankerweiterung für Gruppen: CMS_EXPORT
  • TODO cronjob zum periodischen Abgleich von Gruppen und User
  • TODO Lasttests
    • alle User und Gruppen schreiben und wieder löschen
    • wie verhält sich das System, wenn alle User und Gruppen registriert sind
  • TODO Auffinden einer Gruppe aufgrund des Gruppennamens und des Gruppentyps (Leitzahl, Studiengang, Custom)
  • TODO Batchjob: Initiales Füllen des Produktionssystems
  • TODO Behandlung von Usern ausserhalb Shibboleth (Konzept)

Ausgangslage

Die ETH führt ein neues Content Management System ein (CQ Version 5 von Adobe / Day), welches in Zukunft Silva (das derzeitige CMS) vollständig ablösen soll. Dieses Dokument dreht sich ausschliesslich um das User- und Gruppenmanagement innerhalb von CQ5.

Tools

Wahl des Usernamens

Für die Wahl des Usernamens innerhalb von CQ5 bieten sich mehrere Möglichkeiten an:

Der nethz-Username ist die einfachste Wahl, weil er allen bekannt ist. Leider ist er für eine AAI-Authentifizierung nicht besonders geeignet, da Wahrscheinlichkeit sehr gross ist, dass derselbe Usernamen an einer anderen Universität ebenfalls vorkommt.

Die zweite Variante behebt zwar diese Problematik, indem mit der Angabe der swissEduPersonHomeOrganization die Eindeutigkeit gewahrt bleibt. Allerdings kann es Verwirrung stiften, wenn ein Username zwar wie eine E-Mail-Adresse aussieht, aber nicht zwingend funktioniert (an der ETH ist dies der Fall, aber für externe Benutzer gilt dies nicht).

Die dritte Variante ist sicherlich die eleganteste, vereint sie doch Vertrautheit mit Eindeutigkeit. Ausserdem ist das Attribut mail eines der Must-Attribute in Shibboleth, sollte also für alle User vorhanden sein. Auch User gänzlich ausserhalb des Shibboleth-Verbundes könnten sich mit ihrer Mail-Adresse als Username registrieren. Nachteile hat diese Variante insofern, als dass Haupt-Mailadressen wahrscheinlich häufiger geändert werden als der Username selbst. Ausserdem wird ein CQ-Service vom Vorhandensein einer Mailadresse abhängig gemacht. Insgesamt aber weist diese Variante die Meisten Vor- und die wenigsten Nachteile auf.

Wahl des Gruppennamens

Management von User und Gruppen über Web-GUI

* http://cq-integration.ethz.ch:8083/libs/cq/core/content/welcome.html

REST-Schnittstelle: Apache Sling

Für den Zugriff auf das JCR-Repository gibt es (neben dem API) einen Webservice, welcher die meisten Funktionen zur Verfügung stellt. Dabei kommt eine RESTful Schnittstelle namens Apache Sling zum Einsatz. Die grundlegende Idee ist die, dass die Struktur der URL bestimmt, was mit dem HTTP-Request passieren soll:

METHOD $host:$port/$path.$selector.$extension/$suffix?$param1=$value1&$param2=$value2

Die METHOD bestimmt, wie der HTTP-Request abgesetzt wird. Lesend wird immer mit GET zugegriffen, Schreibvorgänge (insert, update, delete) immer mit POST. Host und Port werden vom Server bestimmt. Der Path bezeichnet eigentlich einen sog. Node, welcher wiederum bestimmte Eigenschaften besitzt. Der Selector bestimmt, welches Skript (JavaServlet) auf dem Server ausgeführt werden soll. Die Extension bestimmt das Rendering des Outputs, z.B. .json, .html, .pdf. Wozu der Suffix gut sein soll, habe ich bis jetzt nicht begriffen. Schliesslich können noch handelsübliche Parameter angegeben werden, um die Abfrage genauer zu spezifizieren (siehe das memberOf-Beispiel weiter unten).

HTTP-Zugriff auf CRX-Repository: Beispiele

Um die Daten zu modifizeren, benötigt man natürlich einen berechtigen Admin-User. Die Authentisierung erfolgt mit HTTP Basic Access Authentication. Dabei werden Username und Passwort base_64 encodiert im Header des Requests übergeben. Weil base_64 keine Verschlüsselung darstellt, sollte der gesamte Datenverkehr über HTTPS laufen.

Generell müssen alle POST-Requests im ISO-8859-1 Format übertragen werden. Eine Ausnahme bilden die addMembers und removeMembers Aktionen, bei welchen die principalNames zuerst in UTF-8 und danach URL-encodiert übergeben werden müssen (ein Bug in CQ5).

Aktion HTTP-Request
User erstellen POST http://$host:$port/libs/cq/security/authorizables/POST
rep:userId:swen@ethz.ch
givenName:Swen
familyName:Vermeul
email:swen@ethz.ch
rep:password:geheim

Optional:
intermediatePath:my/special/path
Benutzer werden in /home/users/my/special/path erzeugt
mySpecialProperty:my value
das Attribut mySpecialProperty wird im Profile des Users oder der Gruppe hinzugefügt
User modifizieren

POST http://$host:$port/home/users/s/swen@ethz.ch.rw.json oder
POST http://$host:$port/home/users/s/swen@ethz.ch.update.json

Parameter

  • key=value (hinzufügen oder überschreiben)
User löschen POST http://$host:$port/home/users/s/swen@ethz.ch
deleteAuthorizable:1
Alle Users auflisten GET http://$host:$port/home/users.tidy.infinity.json
Alle Gruppen auflisten GET http://$host:$port/home/groups.tidy.1.json
Daten eines Benutzers GET http://$host:$port/home/users/u/user.json
Detailierte Daten abrufen GET http://$host:$port/home/users/u/user.rw.json?props=*
direkte Mitglieder einer Gruppe abrufen GET http://$host:$port/home/groups/a/administrators.rw.json?props=declaredMembers
Mitglieder einer Gruppe abrufen, inklusive alle Untergruppen GET http://$host:$port/home/groups/a/administrators.rw.json?props=member
direkt übergeordnete Gruppen abrufen GET http://$host:$port/home/users/u/user.rw.json?props=declaredMemberOf
alle übergeordneten Gruppen abrufen, GET http://$host:$port/home/users/u/user.rw.json?props=memberOf
Gruppe erstellen POST http://$host:$port/libs/cq/security/authorizables/POST
groupName:test_group
givenName:Test_Group
aboutMe:This is a test group
Gruppe modifizieren POST http://$host:$port/home/groups/t/test_group.update.json
aboutMe:neuer Text
Gruppe löschen POST http://$host:$port/home/groups/t/test_group
deleteAuthorizable:1
Gruppe lesen GET http://$host:$port/home/groups/t/test_group.json
Knoten löschen POST http://$host:$port/home/users/s/swen.vermeul@id.ethz.ch/profile
:operation:delete
Knoten kopieren POST http://$host:$port/home/users/s/swen@ethz.ch/profile
:operation:copy :dest:/home/users/s/swen.vermeul@id.ethz.ch/profile
User zu einer Gruppe hinzufügen (1) POST http://$host:$port/home/groups/t/test_group.rw.html
addMembers:cristian.tuduce@id.ethz.ch
Achtung! Die principalNames bei addMembers müssen zuerst UTF-8 und danach URL-encodiert werden, sofern sie Umlaute o.ä. enthalten. Das ist ein Bug in CQ5.
User zu einer Gruppe hinzufügen (2) POST http://$host:$port/home/users/c/cristian.tuduce@id.ethz.ch
membership:test_group
User aus einer Gruppe entfernen POST http://$host:$port/home/groups/t/test_group.rw.html
removeMembers:cristian.tuduce@id.ethz.ch
Attribut im Profile des Users / der Gruppe löschen POST http://$host:$port/home/users/s/swen@ethz.ch.update.json
mySpecialAttribute:
Variante:
POST http://$host:$port/home/users/s/swen@ethz.ch/profile.update.json
mySpecialAttribute@Delete

  • $host (Test): http://cq-integration.ethz.ch
  • $port: 8083
  • Generell werden Daten durch einen HTTP-GET abgerufen und durch einen HTTP-POST modifiziert oder gelöscht
  • Alle Seiten sind mit Basic Authentication geschützt

Query Builder

CQ Query Builder bietet weitere Möglichkeiten Suchabfragen zu machen, allerdings ist die Syntax nicht gerade straight forward. Es gelten folgende Prinzipien:

  • Bei Suche nach mehreren verschiedenen Attributen {Property1 AND property2) müssen die Parameter mit einem Präfix nummeriert werden
    • 1_property=jcr:primaryType
    • 2_property=rep:principalName
  • Um mehrere Werte innerhalb eines Attributes zu finden (Wert1 OR Wert2) müssen die values ebenfalls mit einem Präfix nummeriert werden. Das nummerierte Attribut (s.o.) wird mit einem Punkt vorneangestellt:
    • 1_property.1_value=rep:Group
    • 1_property.2_value=rep:User
    • 2_property.1_value=swen@ethz.ch
  • um alle Attribute auszugeben
    • p.hits=full
  • um nur selektive Attribute auszugeben
    • p.hits=selective
    • p.properties=rep:principalName%20profile/givenName%20profile/familyName
  • um die Werte der nächsten n tieferliegenden Knoten (child nodes) ebenfalls auszugeben
    • p.hits=full
    • p.nodedepth=n

Die folgenden Beispiele werden jeweils mit http://$host:$port/bin/querybuilder.json? aufgerufen und mit einem Ampersand (&) verbunden:

Aktion HTTP-Request
User oder Gruppe suchen 1_property=jcr:primaryType
1_property.1_value=rep:User
1_property.2_value=rep:Group
2_property=rep:principalName
2_property.value=swen@ethz.ch
User suchen und 1. Unterknoten zeigen type=rep:User
property=rep:principalName
property.value=matteo.corti@id.ethz.ch
p.hits=full
p.nodedepth=1
User Property suchen property=profile/givenName
property.value=Matteo
p.hits=full
p.nodedepth=1

weitere interne Dokumentationen

Dokumentationen im Web

Glossar

  • CRX Storage-System, spezialisiert auf Inhalte, basiert auf JCR. Wird von CQ5 verwendet. Details
  • JCR Java Content Repository. Vereint die Vorteile einer relationalen Datenbank mit den Vorteilen eines konventionellen Filesystems (soweit der Werbetext). Im Prinzip ein Directory auf Java-Basis, aber ohne LDAP-Protokollunterstützung (sondern Apache Sling). Für unstrukturierte Daten, basierend auf Nodes (Knoten), die bestimmte Eigenschaften besitzen.
  • Jackrabbit (Apache). Referenzimplementation der JCR-Spezifikation
  • Sling (Apache). Ein Web-Framework, greift auf JCR zu und bietet HTTP-Zugriff in einer Art und Weise, wie sie von REST angeregt wird. Details
  • Node (im JCR-Kontext). Wird im Sling-Kontext als ressource bezeichnet. Definition...
  • OSGi
  • REST Representational State Transfer, ein Softwarearchitekturstil für verteilte Hypermedia-Informationssysteme. Es existiert keine explizite Norm, die Vorstellungen, wie eine REST-Schnittstelle auszusehen hat, gehen weit auseinander. Sling ist eine mögliche Form einer REST-Schnittstelle. Details
  • Sidekick in CQ gibt es ein kleines Fenster, welches diverse Komponenten enthält, die für eine Seite verwendet werden können. Einfache Komponenten sind beispielsweise Bilder, Links und Tabellen. Komplexere Komponenten sind Slideshows, Fotogalerie oder ein Infobanner. Sie können per Drag&Drop in die Seite gezogen werden.
  • Content Finder (CF) befindet sich üblicherweise in der linken Spalte. Er beinhaltet neben Digital Assets (Bilder, Filme, PDF-Dokumente) auch jeglichen anderen Content.
  • DAM Digital Asset Management. Verwaltet die Dokumente (Bilder, Filme, PDF-Dokumente). Ist ein Teil des CF.

Installation von einem lokalen CQ5

  • Executable JAR-File
  • Link im Confluence für Installation: Entwicklungsumgebung -> Upgrade CQ5
  • Aktuelle Version: CQ 5.5
  • lokale Installation
  • cq-integration.ethz.ch:8083
  • Quality-Assurance-System
  • Produktives System

Autoring vs. Publishing

  • confluence -> Architektur -> CQ Architektur
  • auf der Autoring-Instanz arbeiten die Autoren
  • Inhalt wird auf Publishing-Instanz kopiert

Skalierbarkeit

  • Vermeiden: sehr viele Objekte innerhalb eines Knotens - zum Beispiel über 2000 Userobjekte
  • wenn man den Knoten im GUI öffnet, wartet man eine ziemliche Weile
  • Vermeiden: Hide Users, wenn es sehr viele Userobjekte gibt
-- SwenVermeul - 2012-04-05
Topic revision: r37 - 2013-10-01 - vermeul
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2017 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback