Zum Hauptinhalt springen

Berechtigungssystem

Das Berechtigungssystem von OpenVLE steuert, welche Aktionen Benutzer auf welchen Ressourcen ausführen dürfen. Es basiert auf einem ObjectPermission-Modell, das sowohl globale als auch objektbezogene Berechtigungen unterstützt.

Authentifizierung vs. Autorisierung

Die Autorisierung (was darf ein Benutzer tun?) wird durch das hier beschriebene Berechtigungssystem gesteuert. Die Authentifizierung (wer ist der Benutzer?) wird separat behandelt — siehe Authentifizierung.

Konzept

Jede Berechtigung in OpenVLE ist eine Kombination aus:

  • Objekttyp — Die Ressource, auf die sich die Berechtigung bezieht (z. B. VirtualMachine, Event, User, Role)
  • Objekt-ID — Eine spezifische Instanz (oder leer für globale Berechtigung)
  • Berechtigungsschlüssel — Die erlaubte Aktion (z. B. object_read, object_update, object_full)
  • Entität — Der Benutzer oder die Rolle, der/die die Berechtigung erhält

Berechtigungsschlüssel

Standard-CRUD-Berechtigungen

Die CRUD-Berechtigungen folgen einer Hierarchie — eine höhere Berechtigung schließt die darunterliegenden automatisch mit ein:

SchlüsselGewährtBeschreibung
object_fullfull, delete, update, read, createVollzugriff auf die Ressource
object_deletedelete, update, readLöschen, Bearbeiten und Lesen
object_updateupdate, readBearbeiten und Lesen
object_readreadNur Lesen
object_createcreateNeue Objekte erstellen (nur global)
Hierarchie-Beispiel

Hat ein Benutzer object_delete auf VMs, darf er VMs löschen, bearbeiten und lesen — eine separate object_read-Berechtigung ist nicht nötig.

Spezielle Berechtigungen

Neben den Standard-CRUD-Berechtigungen gibt es spezielle Berechtigungen für bestimmte Objekttypen:

SchlüsselObjekttypBeschreibung
object_actions_start, object_actions_stop, ...VirtualMachine, EventEinzelne Aktionen (Starten, Stoppen, etc.)
object_set_passwordUserPasswort eines Benutzers ändern
object_searchUserBenutzer durchsuchen
object_send, object_send_bulkMailE-Mails versenden
object_resetVirtualMachineVM zurücksetzen
object_templates_updateEventVM-Vorlagen in Veranstaltungen aktualisieren

Globale vs. objektbezogene Berechtigungen

Das System unterscheidet zwei Geltungsbereiche:

GeltungsbereichObjekt-IDWirkung
GloballeerGilt für alle Instanzen des Objekttyps
ObjektbezogenUUID einer InstanzGilt nur für die spezifische Instanz

Beispiel: Ein Benutzer mit globalem object_read auf VirtualMachine kann alle VMs lesen. Ein Benutzer mit objektbezogenem object_read auf eine bestimmte VM-ID kann nur diese eine VM lesen.

Bei der Berechtigungsprüfung wird zuerst nach einer objektbezogenen Berechtigung gesucht. Ist keine vorhanden, wird auf die globale Berechtigung zurückgefallen.

Nur-globale Objekttypen

Einige Objekttypen unterstützen ausschließlich globale Berechtigungen (keine objektbezogenen): Activity, Changelog, Dashboard, Language, Mail, ObjectPermission, Proxmox, SubTask, System, Tag, Task.

Rollen

Rollen fassen Berechtigungen zusammen und können mehreren Benutzern zugewiesen werden. Benutzer erben alle Berechtigungen ihrer zugewiesenen Rollen.

  • Benutzerdefinierte Rollen — Können frei erstellt, bearbeitet und gelöscht werden
  • Systemrollen — Vordefinierte, geschützte Rollen, die nicht gelöscht werden können

Ein Benutzer kann mehrere Rollen haben. Die effektiven Berechtigungen ergeben sich aus der Kombination aller direkten Berechtigungen und aller Rollen-Berechtigungen.

Berechtigungsprüfung

Bei jeder geschützten Aktion prüft das Backend die Berechtigung über den PermissionChecker:

  1. Effektive Berechtigungen laden — Alle direkten Berechtigungen des Benutzers und alle Berechtigungen seiner Rollen werden zusammengeführt
  2. Berechtigung auflösen — Der angeforderte Berechtigungsschlüssel wird gegen die effektiven Berechtigungen geprüft (inkl. Hierarchie)
  3. Ergebnis — Bei vorhandener Berechtigung wird die Aktion ausgeführt, andernfalls wird 403 Forbidden zurückgegeben

Frontend-Sichtbarkeit

Das Frontend ruft die effektiven Berechtigungen des angemeldeten Benutzers über die API ab. Basierend darauf werden Aktionen und Elemente in der Benutzeroberfläche ein- oder ausgeblendet — Buttons zum Erstellen, Bearbeiten oder Löschen werden nur angezeigt, wenn der Benutzer die entsprechende Berechtigung besitzt.

Datenmodell

Das Berechtigungssystem basiert auf folgenden Datenbanktabellen:

TabelleBeschreibung
sys_usersBenutzerkonten
sys_rolesRollen mit Name, Schlüssel und Schutzstatus
sys_users_rolesZuordnung von Benutzern zu Rollen (n:m)
sys_object_permissionsAlle Berechtigungen — sowohl für Benutzer als auch für Rollen

Die Tabelle sys_object_permissions vereint alle Berechtigungszuweisungen in einer einzigen Struktur:

FeldBeschreibung
object_typeRessourcentyp (z. B. VirtualMachine, Event)
object_idSpezifische Instanz (leer = global)
entity_idBenutzer- oder Rollen-ID
entity_typeUser oder Role
permission_keyBerechtigungsschlüssel (z. B. object_read)