Im Rahmen einer Neuimplementierung soll das bestehende (Datenbank-basierte) ACL-System und das darauf aufbauende Stragegy-Konzept durch ein neues System abgelöst werden, welches (ausgehend von einer Regeldatei im XML-Format) Fakten ermittelt und daraus die Zugriffsrechte ableitet.
Um das neue System zu aktivieren, müssen folgende MyCoRe-Properties gesetzt werden:
|
|
Außerdem empfielt es sich während der Konfigurationsphase das Log-Level (in der log4j2.xml
) für das Package org.mycore.access.facts
auf DEBUG
zu setzen.
Ausgangsbasis ist eine Regeldatei im XML-Format, die sämtliche Zugriffsberechtigungen auf die Dokumente und Objekte des Repositories beschreibt. Sie stellt einen komplexen booleschen Ausdruck dar, in dem einzelne Bedingungen miteinander verknüpft sind.
Ist eine Bedingung wahr
, wird dieser Umstand als Fakt in einer Faktenliste vermerkt. Sollte dieselbe Regel an einer
anderen Stelle erneut verwendet werden, ist das Ergebnis der Auswertung bereits bekannt und sie wird nicht erneut geprüft.
Die komplette Konfiguration des ACL-Systems erfolgt in einer XML-basierten Regeldatei. Mittels
boolescher Algebra können darin sämtliche Berechtigungen für die MyCoRe-Anwendung konfiguriert werden.
Standardmäßig heißt die Datei rules.xml
und befindet sich auf oberster Ebene im Classpath.
Es wird empfohlen, sie im Konfigurationsverzeichnis im resources
-Ordner der Anwendung abzulegen.
Über das Property MCR.Access.RulesURI
kann eine andere Regel-Datei konfiguriert werden.
Die Beschreibung der Regel-Datei erfolgt in einem einfachen XML-Format.
Ein Beispiel:
|
|
<and>
, <or>
und <not>
können beliebig tief verschachtelte boolesche Ausdrücke
definiert werden. Auch die Regeldatei selbst bildet einen komplexen booleschen Ausdruck. Es wird empfohlen, auf der obersten Ebene die Regeln mit
<or>
zu verknüpfen und jede einzelne Regel in einem <and>
-Block zu definieren.
<action>
)
Die drei Standard-Aktionen heißen read
, write
und delete
.
Für Derivate können zusätzlich noch die Aktionen view
(Anzeige im Viewer) und preview
(Anzeige eines Vorschaubildes)
definiert werden.
Aus anderen MyCoRe-Komponenten oder der eigen Anwendung können weitere Aktionen hinzu kommen.
(z.B.: create-user
, register-Datacite
, ...)
<target>
)metadata
(MyCoRe-Objekte)files
(Dateien = Inhalte der MyCoRe-Derivate)category
(Klassifikationseinträge)webpage
(Webseiten = URLs mit statischen Inhalten)solr
(SOLR = URLs für SOLR-Requesthandler)restapi
(REST-API)<user>
, <role>
)Die Regeln können auf bestimmte Nutzer und Rollen beschränkt werden.
<createdby>
)Für die Person, die das Objekt erstellt hat, können individuelle Regeln definiert werden.
|
|
<category>
)Es wird geprüft, ob das Objekt der angegebenen Klassifikation zugeordnet wurde.
Mit dem Attribute idfact
kann angegeben werden, dass die Prüfung der Klassifikation
für das Derivate (derid
) und nicht für das Objekt (objid
) erfolgen soll.
|
|
<status>
)
Es wird geprüft, ob im <service>
-Bereich des MyCoRe-Objektes der angegebenen Status gesetzt wurde.
Mit dem Attribute idfact
kann angegeben werden, dass die Prüfung der Klassifikation
für das Derivate (derid
) und nicht für das Objekt (objid
) erfolgen soll.
|
|
<regex>
)objid
) und ggf. die Derivate-ID (derid
)
zur Überprüfung zur Verfügung.
|
|
<ip>
)
|
|
|
|
Properties: mycore.properties
|
|
Regel: rules.xml
|
|
id
= ID des zu prüfenden Objektesobjid
= ID des MyCoRe-Objektes (wenn zutreffend)derid
= ID des MyCoRe-Derivates (wenn zutreffend)target
= Ziel der Prüfung: metadata, files,... (s.o.)
Anschließend wird der boolesche Ausdruck in der Regeldatei verarbeitet.
Ergibt eine Regel true
, wird das als Fakt vermerkt.
Der Name des Faktes entspricht dem Namen der Regel. Mit dem optionalen Attribut fact
kann der Faktname geändert werden. Das ist sinnvoll, wenn eine Regel in verschiedenen Zusammenhängen genutzt wird
(z.B gleichzeitig für Objekte und Derivate), oder wenn in anderen Regeln (z.B. regex
) explizit darauf
zugegriffen werden soll.
Einige Regeln (z.B. für Reguläre Ausdrücke) nutzen Fakten aus anderen Regeln. Sollten diese Fakten noch nicht verfügbar sein, versucht das System anhand des Faktnamens zu ermitteln welche Regel für die Bereitstellung des Faktes verantwortlich ist und zieht deren Ausführung vor.
Das System lässt sich einfach um neue Regeln erweitern.
Diese sollten die Klasse MCRAbstractFactCondition
erweitern. In der Regel ist es dabei ausreichend
die Methode computeFact(MCRFacts facts)
zu implementieren.
Grundlage für die Überprüfung sind Informationen aus der Session, das zu prüfende Objekt und die bereits ermittelten Fakten.
Ist das Ergebnis wahr
, wird für die Regel ein neuer Fakt in dei Faktenliste eingetragen.
Die neue Regel ist in die mycore.properties einzutragen:
|
|