#import "@preview/wrap-it:0.1.1": *

== Benutzer & Rollenverwaltung

#figure(
  image("../../images/user-overview.png", width: 100%),
)

Im FF Admin können Daten nur von Benutzern geändert werden. Diese Benutzer melden sich mit einem TOTP an. Ein TOTP (Time-based One-time Password) ist ein zeitbasiertes Passwort, das sich jede Minute ändert. Jeder Benutzer hat Lese-, Bearbeitungs- und Löschrechte. Es können auch Rollen erstellt und Benutzern zugewiesen werden. 

#wrap-content(
  figure(
    image("../../images/user-invite.png", width: 6.5cm),
  ),
)[
Benutzer können nicht direkt hinzugefügt werden. Eine Einladung muss verschickt werden.

Einladungen sind nur solange gültig, bis sie angenommen oder zurückgezogen werden.

Bei einer Einladung wird ein personalisierter Link an die angegebene E-Mail-Adresse gesendet, über den sich der Benutzer registrieren kann. Nach der Registrierung hat der Benutzer noch keine Rollen oder Berechtigungen. Diese müssen nach der Registrierung zugewiesen werden.

Ein Benutzername oder eine E-Mail-Adresse darf nur einmal existieren.
]

#wrap-content(
  figure(
    image("../../images/nopermission.png", width: 6.5cm),
  ),
  align: right
)[
Wenn ein Benutzer keine Berechtigungen hat oder diese ihm entzogen wurden, wird die Meldung auf der linken Seite angezeigt.

Nach der Registrierung wird diese Meldung standardmäßig angezeigt.

Durch Klicken auf die Schaltfläche "Zum Admin-Portal" werden die Berechtigungen neu geladen.
]

#wrap-content(
  figure(
    image("../../images/user-permissions.png", width: 6.5cm),
  ),
)[
Berechtigungen werden immer addiert. Wenn ein Benutzer direkt zugewiesene Berechtigungen und Rollen erhält, werden die Berechtigungen addiert und der Benutzer kann alles, was zugewiesen wurde und was die Rolle kann.

Das Berechtigungsmodell unterscheidet zwischen Lese-, Erstellungs-, Änderungs- und Löschberechtigungen. Die Berechtigungen sind abgestuft. Das heißt, wer anlegen darf, darf auch lesen. Wer bearbeiten darf, darf auch anlegen und dementsprechend auch lesen usw.

Die Berechtigungen sind nach Sektionen gruppiert. Wenn die Berechtigung für einen Abschnitt auf Lesen gesetzt ist, kann der Benutzer mit dieser Berechtigung Daten in allen Modulen des Abschnitts lesen.

Erweiterte Berechtigungen können pro Modul gesetzt werden. Dabei gelten die Berechtigungen des Abschnitts immer mehr als die eines Moduls innerhalb des Abschnitts.
]

#wrap-content(
  figure(
    image("../../images/user-roles.png", width: 6.5cm),
  ),
  align:right
)[
Damit Rollen oder Berechtigungen von einem Benutzer vergeben werden können, muss dieser Benutzer über Administratorrechte verfügen. Dabei ist es unerheblich, ob die Admin-Berechtigung über eine Rolle oder direkt vergeben wird.

Rollen fassen Berechtigungen zusammen und ergänzen die einem Benutzer direkt zugewiesenen Berechtigungen. 

Rollen können sich nicht gegenseitig ausschließen.

Einem Benutzer können mehrere Rollen zugewiesen werden. Muss aber keine Rollen haben.
]

#figure(
  image("../../images/role-overview.png", width: 100%),
)

Rollen dienen der Abstraktion von Berechtigungen. Dadurch können spezifische Berechtigungsschemata direkt einem oder mehreren Benutzern zugewiesen werden, ohne dass diese mehrfach zugewiesen werden müssen.
\
\
\
*Hinweis:* Änderungen bei den Berechtigungen oder Rollen haben keinen direkten Effekt bei den Nutzern. Die Änderungen haben erst dann einen Effekt, wenn die Session erneuert wird. Die Dauer, bis die Änderungen einen Einfluss haben, wird durch den Wert von `JWT_EXPIRATION` bestimmt.

Sollen Änderungen direkt verfügbar sein, muss sich der Nutzer ab- und wieder anmelden.
Wird Nutzern die Seite `nopermissions` angezeigt, genügt ein Klick auf "Zum Admin-Portal". Dadurch werden die Berechtigungen erneut geladen.