Zugriffskontrolle über ACL
Allgemeines
ACLs und Privilegien sind in MyCoRe in zwei SQL-Tabellen gespeichert. Die Tabelle MCRACCESS enthält die Zugriffslisten und Privilegien. Ergänzt wird das system durch die Tabelle MCRACCESSRULES, welche die konkreten Regeln für den Zugriff enthält.
Aufrufe
Die Aufrufe von Zugriffsrechten können über verschiedene API erfolgen. Hier die Beispiele für JAVA und XSLT.
boolean permission = MCRAccessManager.checkPermission("create-" + mycore_id.getBase());
boolean permission = MCRAccessManager.checkPermission(mycore_id, PERMISSION_WRITE);
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:acl="xalan://org.mycore.access.MCRAccessManager" ... exclude-result-prefixes="... acl"> ... <xsl:if test="acl:checkPermission($obj_id,'readintern')"> ... </xsl:if> ... </xsl:stylesheet>
Privilegien
Privilegien sind Zugriffsrechte, die sich nicht direkt auf ein einzelnes Datenobjekt beziehen. Vielmehr wird der Zugriff auf eine Funktionalität geregelt. Die kann die Erlaubnis für das Anlegen eines Datensatzes create-privileg sein oder das Recht, beispielsweise die WEB-CLI zu nutzen. Einige nötige Privilegien sind an den jeweiligen Stellen in dieser Dokumentation beschrieben.
Privilegien werden in einer entsprechenden Datei definiert und mittels Kommando geladen.
<?xml version="1.0" encoding="UTF-8"?> <mcrpermissions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="MCRPermissions.xsd" xmlns:xml="http://www.w3.org/XML/1998/namespace" > <mcrpermission name="manage-sessions" description="Administration rights for the session system" ruledescription="For administrators only"> <condition format="xml"> <boolean operator="or"> <condition value="admingroup" operator="=" field="group"/> </boolean> </condition> </mcrpermission> <mcrpermission name="create-MyProject_mir" description="Create rights for datamodel mir of project MyProject"> <condition format="xml"> <boolean operator="or"> <condition value="admin" operator="=" field="group"/> <condition value="authorgroup" operator="=" field="group"/> </boolean> </condition> </mcrpermission> </mcrpermissions>
Permissions
Das Setzen der Permissions ist stark von der verwendeten Access-Strategie abhängig. So reicht die Palette von Rechten für ganze Datenmodell-Typen über rechte für Datenmodell-Bases (Projekt_Typ) bis hin zu feingranularen Rechten für jedes MCRObject und MCRDerivate. Je feiner die Rechtevergabe, um so größer wird auch die notwendige Tabelle. Dabei wird für jedes Recht (z. B. read, write und delete) jeweils ein Eintrag vorgenommen. Für Anwendungen mit vielen Datensätzen und einer kleinen Autorengruppe ist daher die Vergabe globalerer Permissions (z. B. über ganze Datentypen) sinnvoll und effizient. Gesteuert wird die Nutzung durch die jeweilige Strategie.
Im MyCoRe-Datenmodell ist ein Abschnitt im Bereich services vorgesehen, welcher Zugriffsregeln für genau diesen datensatz enthalten kann. Je nach Strategie werden diese Regeln genutzt und gespeichert. Auch die Java-API enthält eine entsprechende Klasse MCRMetaAccessRule .
Regeln
Jede Permission beinhaltet Regeln (Conditions), die festlegen, wann das entsprechende Recht gegeben wird.In MyCoRe sind drei Gruppen von Regeln vorgesehen:
- für Nutzer
- für Rollen
- für IP-Adressbereiche
Es ist nicht notwendig, alle Gruppen von Regeln zu nutzen. Auch können Gruppen noch logische AND / OR -Container enthalten. Alle Regeln werden in der Tabelle MCRACCESSRULES einmalig abgelegt und von dort referenziert. Eine Übersicht gibt der folgende XML-Ausschnitt:
<?xml version="1.0" encoding="utf-8"?> <condition format="xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="MCRCondition.xsd"> <boolean operator="or"> <boolean operator="or"> <condition value="ublauthor" operator="=" field="group" /> <condition value="admin" operator="=" field="group" /> </boolean> <boolean operator="or"> <condition value="thomas" operator="=" field="user" /> <condition value="kathleen" operator="=" field="user" /> </boolean> <condition value="192.168.2.0/255.255.255.0" operator="=" field="ip" /> </boolean> </condition>
Kommandos
Über die MyCoRe Kommandozeile können auch alle administrativen Operationen für die Zugriffskontrolle ausgeführt werden.
-
load permissions data from file {0}
- Das Kommando läde Permissions aus einem vorgegeben File {0}.
-
update permission {0} for id {1} with rulefile {2}
- Das Kommando aktualisiert eine bestimmte Permission {0} für eine MyCoRe-ID {1} entsprechend der Definition im vorgegeben File {2}.
-
update permission {0} for selected with rulefile {1}
- Das Kommando aktualisiert eine bestimmte Permission {0} für ausgewählet IDs (siehe select-Kommando) entsprechend der Definition im vorgegeben File {1}.
-
list all permissions
- Das Kommando listet alle gespeicherten Permissions.
-
export all permissions to file {0}
- Das Kommando exportiert alle gespeicherten Permissions in das File {0}.
-
delete permission {0}
- Das Kommando löscht die Permission {0}.
-
delete permission {0} for id {1}
- Das Kommando löscht die Permission {0} für eine MyCoRe-ID {1}.
-
delete all permissions for id {1}
- Das Kommando löscht alle Permissions für eine MyCoRe-ID {1}.
-
delete permission {0} for selected
- Das Kommando löscht die Permission {0} für ausgewählet IDs (siehe select-Kommando).
-
delete all permissions for selected
- Das Kommando löscht alle Permissions für ausgewählet IDs (siehe select-Kommando).
-
delete all permissions
- Das Kommando löscht alle Permissions.
Jens Kupferschmidt, Kathleen Neumann - 2015-11-10