From 1eb40b40c99b4aed31da983332e8b44275c19dd9 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Fri, 1 Mar 2024 14:02:50 +0100 Subject: [PATCH] docs: add documentation for user roles --- README.md | 17 +++++++++++++++++ docs/userroles.png | Bin 0 -> 16671 bytes 2 files changed, 17 insertions(+) create mode 100644 docs/userroles.png diff --git a/README.md b/README.md index e033d69..2f1fc25 100644 --- a/README.md +++ b/README.md @@ -114,6 +114,23 @@ Weitere Informationen zur Konfiguration des OIDC-Providers sind [hier](https://docs.spring.io/spring-security/reference/servlet/oauth2/index.html#oauth2-client) zu finden. +#### Rollenbasierte Berechtigungen + +Wird OpenID Connect verwendet, gibt es eine rollenbasierte Berechtigungszuweisung. + +Die Standardrolle für neue OIDC-Benutzer kann mit der Option `APP_SECURITY_DEFAULT_USER_ROLE` festgelegt werden. +Mögliche Werte sind `user` oder `guest`. Standardwert ist `user`. + +Benutzer mit der Rolle "Gast" sehen nur die Inhalte, die auch nicht angemeldete Benutzer sehen. + +Hierdurch ist es möglich, einzelne Benutzer einzuschränken oder durch Änderung der Standardrolle auf `guest` nur +einzelne Benutzer als vollwertige Nutzer zuzulassen. + +![Rollenverwaltung](docs/userroles.png) + +Benutzer werden nach dem Entfernen oder der Änderung der vergebenen Rolle automatisch abgemeldet und müssen sich neu anmelden. +Sie bekommen dabei wieder die Standardrolle zugewiesen. + #### Auswirkungen auf den dargestellten Inhalt Nur Administratoren haben Zugriff auf den Konfigurationsbereich, nur angemeldete Benutzer können die anonymisierte oder diff --git a/docs/userroles.png b/docs/userroles.png new file mode 100644 index 0000000000000000000000000000000000000000..cefb175f7d4d28e446341e09565eb10fe91ede76 GIT binary patch literal 16671 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 PWE8g%cW&m&-Shol7RM`y literal 0 HcmV?d00001