Zum Inhalt springen

Benutzerrollen und Rechte

SwissMentor verwendet ein mehrschichtiges Berechtigungssystem. Es besteht aus Profilen (grobe Benutzerart), Zugriffsgruppen (ACL-Regeln auf Objektebene) und Richtlinien (feingranulares Systemverhalten).


Ein Benutzer ist ein Login-Konto, das mit einer Person in SwissMentor verknüpft ist. Die Verwaltung erfolgt unter System-Administration > Benutzer.

Eigenschaften eines Benutzerkontos:

  • Benutzername (Login)
  • Authentifizierungsmethode: Lokales SwissMentor-Passwort (SM) oder Microsoft Entra ID
  • Status: Aktiv oder gesperrt
  • Zwei-Faktor-Authentifizierung (OTP optional oder erzwungen)
  • Letzter Login, Anmeldeversuche

Ein Benutzer ist immer eine Person. Die Zuordnung erfolgt 1:1 über die PersonID.


Das Profil bestimmt, welche Module, Menüs und Grundfunktionen ein Benutzer sehen darf. Es ist die grobste Ebene der Zugriffsteuerung.

ProfilCodeBeschreibung
AdministratorADMINVollzugriff, alle ACL-Prüfungen werden übersprungen
Power-UserPOWERUSEROperative Benutzer mit erweitertem Zugriff
LehrpersonTEACHERZugriff auf eigene Kurse und Klassen
Lernende/rSTUDENTEingeschränkter Zugriff auf eigene Daten
ElternteilPARENTLesezugriff auf Daten des eigenen Kindes
BetriebVOCTRAINERBetriebsbezogener Zugriff im Lehrlingswesen
ManagerMANAGERFührungssicht
CoachCOACHCoaching-Funktionen
BetreuungCARETAKERBetreuungsfunktionen

Das Profil wird nicht direkt am Benutzer vergeben, sondern ergibt sich aus den Rollen (_ACCESSROLE), die dem Benutzer über Mitgliedschaften zugeordnet sind.


Eine Rolle ist ein Objekt mit dem Objekttyp _ACCESSROLE. Personen werden über Mitgliedschaften einer Rolle zugeordnet. Jede Rolle hat einen ProfileCode, der das Profil des Benutzers bestimmt.

Eine Person kann mehrere Rollen haben. Das System kombiniert die Profile aller zugewiesenen Rollen.

Wichtig: Wenn ein Benutzer Mitglied in einer Gruppe mit dem Code ADMIN ist, lädt das System automatisch alle existierenden Zugriffsgruppen für diesen Benutzer — er hat somit vollen Zugriff.


Zugriffsgruppen sind Objekte mit dem Objekttyp _ACCESSGROUP. Sie bilden die Grundlage für das ACL-System (Objektrechte). Personen werden ebenfalls über Mitgliedschaften einer Zugriffsgruppe zugeordnet.

Zugriffsgruppen erhalten ACL-Regeln, die festlegen, welche Rechte Mitglieder dieser Gruppe auf bestimmten Objekten haben.


Das ACL-System (Access Control List) steuert den Zugriff auf einzelne Objekte in SwissMentor. Es ist das feinste und mächtigste Berechtigungswerkzeug.

RechtCodeBedeutung
LesenREADObjekt anzeigen
Lesen (alle)READALLAlle Felder inkl. sensible anzeigen
Lesen (Buchh.)READACCOUNTINGBuchhaltungsdaten lesen
Lesen (Kalender)READCALENDARKalender/Termine lesen
Lesen (Mitglieder)READMEMBERMitgliederlisten einsehen
Lesen (Dateien)READFILEDateien abrufen
Lesen (Spezial)READSPECIALSpezialfelder lesen (z.B. Lohn)
ErstellenINSERTNeue Objekte anlegen
BearbeitenUPDATEObjekte ändern
LöschenDELETEObjekte löschen
StatusSTATUSStatus-/Workflow-Übergänge auslösen
Objekt-AktionPROCESSObjekt-Aktionen ausführen
KategorieTAGKategorien zuweisen
Kalender bearb.UPDATECALENDARKalendereinträge bearbeiten

Jede ACL-Regel hat einen Zustand:

ZustandWertBedeutung
Erlaubt1Zugriff gewähren
Undefiniert0Keine Aussage (Standard wenn keine Regel greift)
Verweigert-1Zugriff explizit verweigern

Verweigert (-1) hat Vorrang gegenüber Erlaubt (1) — Deny overrides Allow.

Eine ACL-Regel kann auf verschiedene Subjekte angewendet werden:

BedingungFeldBedeutung
Jedereverybody = trueGilt für alle Benutzer
Direkte PersonpersonIDGilt nur für diese eine Person
Eigentümerowner = trueGilt für den Eigentümer des Objekts
Eigene PersonownPerson = truePerson ist selbst das Objekt (z.B. eigenes Profil)
Mitglied des ObjektsownMember = truePerson ist Mitglied des Objekts selbst
Mitglied einer GruppememberOfObjectIDPerson ist Mitglied einer bestimmten Gruppe
Mitgl. eines Elternobjekt-TypsmemberOfParentObjecttypePerson ist Mitglied in einem übergeordneten Objekt des angegebenen Typs

ACL-Regeln können vererbt werden:

OptionBedeutung
recursiv = falseGilt nur für das direkte Objekt
recursiv = trueGilt für das Objekt und alle Unterobjekte
recursiveOnlyChildren = trueGilt nur für Unterobjekte, nicht für das Objekt selbst

Das System durchläuft beim ACL-Check die gesamte Elternhierarchie (via CHILD-Links). Objekte mit aclInherit = true erben Regeln von ihrem Elternobjekt.

ACL-Regeln können auch auf Objekttypen statt auf einzelne Objekte angewendet werden. Eine Regel auf den Objekttyp _BILL gilt dann für alle Rechnungen im System. Die Regel gilt, wenn acl.objectType = objectType.objectType oder = objectType.sysType oder = '_ALL_' (für alle Typen).

Das System nimmt den Minimumwert aller passenden Regeln: Ein einziges “Verweigert” (-1) reicht, um den Zugriff zu blockieren, auch wenn andere Regeln “Erlaubt” sagen.

Wenn einer ACL-Regel das Recht PROCESS gegeben wird, kann zusätzlich über AclRightProcessStep eingeschränkt werden, welche spezifischen Objekt-Aktionen erlaubt sind. Sind keine Einschränkungen definiert, sind alle Objekt-Aktionen erlaubt.


Neben den permanenten ACL-Regeln gibt es einen Whitelist-Mechanismus für zeitlich begrenzte Zugriffsrechte. Ein Whitelist-Eintrag:

  • Gilt für eine bestimmte Person auf einem bestimmten Objekt
  • Hat ein Ablaufdatum (validUntil)
  • Hat einen Zustand (Erlaubt oder Verweigert)
  • Wird durch eine Whitelist-Regel (AclWhitelistRule) generiert, die auf einer SQL-Abfrage basiert

Der Whitelist-Check erfolgt vor dem normalen ACL-Check und hat Vorrang.

Whitelist-Regeln liegen in der Tabelle Object.UserAclWhitelistRule. Die dort hinterlegte SQL-Abfrage wird bei jedem Whitelist-Refresh unverändert mit dem Datenbank-Login der Applikation ausgeführt.

Das bedeutet:

  • Wer eine Whitelist-Regel schreiben kann, kann beliebiges SQL mit den Rechten der Applikation ausführen. Eine Regel entspricht damit faktisch Vollzugriff auf die Datenbank.
  • Whitelist-Regeln sind deshalb weder über die Web-Oberfläche noch über die GraphQL-API lesbar oder änderbar. Sie werden ausschliesslich von Datenbank-Administratoren per SQL-Skript (ChangelogAtom) gepflegt.
  • Schreibrechte auf Object.UserAclWhitelistRule sind auf Datenbank-Ebene auf Administratoren zu beschränken und wie ein Admin-Zugang zu behandeln.
  • Jede neue Regel ist vor dem Einspielen zu reviewen: Sie darf nur SELECT-Abfragen enthalten, die objectID (optional right, state) liefern, und den Parameter @0 als Personen-ObjectID des Benutzers verwenden.

Bestimmte sensible Felder (z.B. Lohndaten, Telefonnummern) können als Sonderfelder definiert werden. Diese werden nur angezeigt, wenn der Benutzer das Recht READSPECIAL auf das Objekt hat. Andernfalls werden sie maskiert (leer gelassen oder mit einem Platzhalter ersetzt).


Unabhängig von den ACL-Rechten können Objekte gesperrt sein. Bei einem Schreib-, Lösch- oder Status-Zugriff prüft das System nach dem ACL-Check, ob das Objekt gesperrt ist.

SperrtypCodeStärkeBedeutung
VerrechnetACCOUNTINGMittelBuchhaltungsrelevante Daten gesperrt. Keine Änderungen oder Löschen möglich. Je nach Objekttyp können bestimmte Objekt-Aktionen noch ausgeführt werden.
In BearbeitungEDITINGSchwachWird gesetzt, wenn ein Benutzer ein Objekt geöffnet hat. Nur eine lose Sperre — andere Benutzer können das Objekt trotzdem über die API ändern. Nur das direkte Speichern via Formular ist blockiert. Benutzer können diese Sperre selbst aufheben.
EingefrorenFREEZEStarkDas Objekt kann nicht mehr geändert werden. Objekt-Aktionen sind jedoch noch möglich. Typisch bei verbuchten Gutschriften.
Nicht löschenNOTDELETESchwachNur das Löschen ist nicht erlaubt. Bearbeiten und Objekt-Aktionen sind weiterhin möglich.
StriktSTRICTAbsolutVollständige, definitive Sperre. Weder Änderungen noch Objekt-Aktionen sind möglich. Wird immer als Fehler geworfen und kann nicht ignoriert werden (auch nicht von Administratoren).

Sperren können automatisch durch Objekt-Aktionen gesetzt oder aufgehoben werden. Im Workflow ist pro Objekt-Aktion konfigurierbar:

  • LockObjectAtStep = 'STRICT' → Objekt wird nach diesem Schritt strikt gesperrt
  • LockObjectAtStep = 'FREEZE' → Objekt wird eingefroren
  • LockObjectAtStep = 'ACCOUNTING' → Buchhaltungssperre wird gesetzt
  • LockObjectAtStep = 'UNLOCK' → Vorhandene Sperre wird aufgehoben

Benutzer mit dem ignoreLocks-Flag (typischerweise Administratoren) können folgende Sperrtypen übergehen: NOTDELETE, EDITING, ACCOUNTING. Strikt (STRICT) kann von niemandem ignoriert werden.


  • Definieren Sie Zugriffsgruppen nach funktionalen Bereichen (z.B. “Sachbearbeiter Billing”, “Kursadmin”)
  • Nutzen Sie Objekttyp-ACLs für systemweite Regeln statt individuelle Objekt-ACLs
  • Explizites Verweigern (-1) sparsam einsetzen — es überschreibt alle erlaubenden Regeln
  • Vergeben Sie das ADMIN-Profil nur an wenige technische Benutzer — es deaktiviert alle ACL-Prüfungen vollständig