2015.05 2016.06

Zugriffskontrolle über ACL

Mit Hilfe sogenannter Access Control Lists (ACL, dt. Zugriffssteuerungslisten) kann der Zugriff auf Daten und Funktionen in MyCoRe-Anwendungen eingegrenzt werden. Eine ACL legt dabei fest, in welchem Umfang einzelne Nutzer oder Gruppen Zugriff auf bestimmte Objekte (Metadaten, Dateien, Webseiten ...) haben. Diese können sehr feingranular spezifiziert werden, z.B. lesen, erstellen, bearbeiten oder löschen.

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