In der KUG Recherche-Infrastruktur werden Berechtigungen in verschiedenen Bereiche über ein Rollen-Konzept abgebildet. Benutzer sind Rollen zugeordnet, die wiederum fest definierte Aktionen zulassen. Bisher waren genau drei Rollen definiert:

  • admin (Administrator): Nutzer mit dieser Rolle haben kompletten Zugang zu allen Bereichen der Web-Administration. Sie können also entsprechende Resourcen einsehen, erzeugen, ändern und löschen (CRUD)
  • librarian  (Bibliothekar): Nutzer mit dieser Rolle sind typischerweise Institutsbibliothekare und können die von ihnen angelegten Literaturlisten für die Studiengänge des Instituts gesondert als „Offizielle Literaturliste des Instituts“ kennzeichen. Auf diese Weise ist im KUG Recherche-Portal anhand eines Tempel-Icons direkt ersichtlich, welche Literaturlisten von „normalen Nutzern“ erstellt wurden und welche von den jeweiligen Fachbereichen.
  • viewadmin (Portal-Administrator): Nutzer mit dieser Rolle verwalten in der Regel ein eigenes Recherche-Portal, wie z.B. Gentz digital und bekommen gesondert die Berechtigung Textinhalte des Portals über einen Web-Editor selbständig zu ändern.

Jenseits dieser Standard-Rollen ist in der jüngsten Vergangenheit unterschwellig ein Bedarf entstanden, feiner granuliert auf bestimmte Bereiche der Web-Administration zugreifen zu können. Bisher konnte das nur über den Voll-Administrator-Zugriff gelöst werden, was weder in unserem allgemeinen Sicherheitsinteresse noch im Interesse der jeweiligen Nutzer lag.

Aus diesem Grund haben wir unser Rollenkonzept noch einmal punktuell überarbeitet:

  1. Für die Bereiche der Web-Administration können nun zentral in der Konfigurationsdatei portal.yml der Intrastruktur sogenannte Scopes definiert werden. Scopes bezeichnen Gültigkeitsbereiche, für die eigene Berechtigungen definiert werden können. Mögliche Berechtigungen leiten sich direkt aus der REST-Natur des Portals ab und sind create (Erzeugen), read (Lesen), update (Ändern) sowie delete (Löschen) der zugeordneten Resourcen in der Web-Administration.
  2. Zusätzlich können Rollen auf eine oder mehrere Portal-Sichten (views) eingeschränkt werden.

Nutzer mit der Admin-Rolle können ab sofort in der Web-Administration selbständig Rollen definieren und diesen zu allen in portal.yml unter dispatch_rules definierten Scopes CRUD-Rechte zuweisen bzw. sie auf views einschränken. Auf diese Weise könnten nun auch beliebige „Unterbereiche“ in der Administration separat mit Rechten versehen werden und damit auch komplexe Berechtigungs-Szenarien abgebildet werden. Der Einfachheit halber haben wir jedoch lediglich Scopes zu jedem Menu-Punkt der Web-Administration definiert.

Beispiel aus portal.yml für die Aktionen in der Cluster-Verwaltung:

- # Repraesentation: admin_loc/clusters_loc
scope: 'admin_clusters'
module: 'OpenBib::Handler::PSGI::Admin::Clusters'
rule: '/portal/:view/admin/clusters[get]'
runmode: 'show_collection'
representations:
- none
- html
- json
- rdf


- # Repraesentation: admin_loc/clusters_loc
scope: 'admin_clusters'
module: 'OpenBib::Handler::PSGI::Admin::Clusters'
rule: '/portal/:view/admin/clusters/id/:clusterid[get]'
runmode: 'show_record'


- # Repraesentation: admin_loc/clusters_loc: Record show form
scope: 'admin_clusters'
module: 'OpenBib::Handler::PSGI::Admin::Clusters'
rule: '/portal/:view/admin/clusters/id/:clusterid/edit[get]'
representations:
- none
- html
runmode: 'show_record_form'


- # Resource: admin_loc/clusters_loc: Create Record
scope: 'admin_clusters'
module: 'OpenBib::Handler::PSGI::Admin::Clusters'
rule: '/portal/:view/clusters[post]'
runmode: 'create_record'


- # Resource: clusters_loc: Update Record
scope: 'admin_clusters'
module: 'OpenBib::Handler::PSGI::Admin::Clusters'
rule: '/portal/:view/clusters/id/:clusterid[post]'
runmode: 'update_record'


- # Resource: clusters_loc: Update Record
scope: 'admin_clusters'
module: 'OpenBib::Handler::PSGI::Admin::Clusters'
rule: '/portal/:view/clusters/id/:clusterid[put]'
runmode: 'update_record'


- # Resource: clusters_loc: Delete Record
scope: 'admin_clusters'
module: 'OpenBib::Handler::PSGI::Admin::Clusters'
rule: '/portal/:view/clusters/id/:clusterid[delete]'
runmode: 'delete_record'

Hat ein Nutzer dann noch nicht einmal die Leseberechtigung für einen Bereich, dann können wir die Anzeige des jeweiligen Menu-Punktes im entsprechenden Template einfach unterdrücken. Auf diese Weise bekommt ein Nutzer nur die für ihn freigegebenen Bereiche übersichtlich zur Auswahl.

Übersicht aller Rollen

Übersicht aller Rollen

Einschränkung auf Views

Einschränkung auf Recherche-Portale (Views)

Vergabe von Rechten pro Gültigkeitsbereich (scope)

Vergabe von Rechten pro Gültigkeitsbereich (Scope)

Für die Erweiterung des Rollen-Konzeptes musste die Systemdatenbank um die zwei Tabellen role_right und role_view erweitert werden:


CREATE TABLE role_view (
id BIGSERIAL,
roleid BIGINT NOT NULL,
viewid BIGINT NOT NULL
);


CREATE TABLE role_right (
id BIGSERIAL,
roleid BIGINT NOT NULL,
scope TEXT default '', /* eg admin, admin_clusters, ... */
right_create BOOL default false,
right_read BOOL default false,
right_update BOOL default false,
right_delete BOOL default false
);

Und darauf aufbauend musste – unabhängig von der Konfigurierbarkeit in der Web-Administration selbst – schließlich nur noch die Authentifizierungsmethode authorization_successful in OpenBib::Handler::PSGI::Admin entsprechend erweitert werden.

Insgesamt haben wir nun alle Möglichkeiten an der Hand, um gezielt Informationen aus der Web-Administration in der USB und der Universität freigeben zu können.