Zum Inhalt

Users-App-Referenz

Die Users-App erweitert Djangos integrierte Authentifizierung um Benutzerprofile, Spracheinstellungen, Theme-Auswahl, MFA-Durchsetzung, Changelog-Verfolgung und Profilbild-Verwaltung. Die Authentifizierung wird von django-allauth übernommen.

Übersicht

Speicherort: app/users/

Zweck: Benutzerprofile, Sprach-/Theme-Einstellungen, MFA-Durchsetzung, Changelog-Benachrichtigungen

Wichtiges Modell: Profile

Abhängigkeiten: django-allauth, django-invitations, Pillow


Dateistruktur

users/
├── models.py              # Profile-Modell
├── views.py               # Profil-, Sprach-, Theme- und Changelog-Views
├── forms.py               # UserUpdateForm, ProfileUpdateForm
├── signals.py             # Auto-Erstellung/-Speicherung von Profilen
├── changelog_signals.py   # Changelog-Benachrichtigung bei Login
├── services.py            # Changelog-Versionsverfolgungsdienst
├── utils.py               # Registrierungskonfigurations-Hilfsfunktion
├── adapters.py            # Benutzerdefinierte allauth-, MFA- und Einladungsadapter
├── middleware.py           # MFA-Durchsetzungs-Middleware
├── admin.py               # Django-Admin-Konfiguration
├── apps.py                # AppConfig (registriert Signale)
└── templates/users/       # Profil-Templates

Modelle

Profile

Speicherort: app/users/models.py:8

Erweitert Djangos User-Modell mit zusätzlichen Einstellungen.

Felder:

Feld Typ Beschreibung
user OneToOneField(User) CASCADE
image ImageField Profilbild, automatisch auf 300x300 skaliert
language CharField(7) Bevorzugte Sprache: en oder de
theme_preference CharField(10) UI-Theme: light, dark oder system
last_seen_version CharField(20) Letzte vom Benutzer gesehene Changelog-Version
default_report_date_range CharField(20) Standard-Datumsbereich für Berichte: current_year oder last_365_days

Save-Hook: Skaliert Bilder automatisch auf 300x300 Pixel mit Pillow.


Views

profile(request)

Anzeige und Aktualisierung des Benutzerprofils.

  • Speicherort: app/users/views.py:25
  • Authentifizierung: Erforderlich
  • Template: users/profile.html
  • Formulare: UserUpdateForm, ProfileUpdateForm

Aktiviert die Spracheinstellung des Benutzers beim Speichern des Profils. Verarbeitet sowohl Benutzerinformationen als auch Profilaktualisierungen in einem einzigen View.

set_language_and_save(request)

POST-only View zum Ändern der UI-Sprache.

  • Speicherort: app/users/views.py:59
  • Setzt Django-Sprach-Cookie
  • Speichert Einstellung im Benutzerprofil (falls authentifiziert)
  • Gibt Weiterleitung zur vorherigen Seite zurück

set_theme(request)

POST-only AJAX-Endpunkt zum Wechseln des Themes.

  • Speicherort: app/users/views.py:97
  • Akzeptiert JSON-Body mit theme-Schlüssel
  • Validiert Theme gegen erlaubte Werte (light, dark, system)
  • Speichert Einstellung im Benutzerprofil (falls authentifiziert)
  • Gibt JSON-Antwort mit Erfolgsstatus zurück

dismiss_changelog(request)

POST-only AJAX-Endpunkt zum Ausblenden der Changelog-Benachrichtigung.

  • Speicherort: app/users/views.py:134
  • Authentifizierung: Erforderlich
  • Markiert den Changelog der aktuellen Version als gesehen für den angemeldeten Benutzer
  • Gibt JSON-Antwort zurück

Formulare

UserUpdateForm

  • Felder: username, email

ProfileUpdateForm

  • Felder: image, language, theme_preference, default_report_date_range

Signale

Speicherort: app/users/signals.py

create_profile

  • Auslöser: post_save auf User (nur bei Erstellung)
  • Aktion: Erstellt automatisch Profile für neue Benutzer mit last_seen_version auf die aktuelle Anwendungsversion gesetzt

save_profile

  • Auslöser: post_save auf User
  • Aktion: Speichert automatisch Profile wenn User gespeichert wird

Speicherort: app/users/changelog_signals.py

handle_changelog_on_login

  • Auslöser: user_logged_in
  • Aktion: Erstellt eine Systembenachrichtigung, wenn sich die Anwendungsversion seit dem letzten Login des Benutzers geändert hat
  • Fehlersicher: Ausnahmen werden abgefangen und protokolliert, der Loginvorgang wird nie blockiert

Dienste

Speicherort: app/users/services.py

Changelog-Versionsverfolgung

Funktion Zweck
should_show_changelog(user) Prüft, ob der Benutzer den Changelog der aktuellen Version noch nicht gesehen hat
mark_changelog_seen(user) Aktualisiert das Profil des Benutzers, um zu vermerken, dass er die aktuelle Version gesehen hat
create_changelog_notification(user) Erstellt eine Systembenachrichtigung über die neue Version mit einem Link zum Changelog

Adapter (django-allauth)

Speicherort: app/users/adapters.py

CustomAccountAdapter

Methode Zweck
is_open_for_signup() Steuert Selbstregistrierung via bifolk.json-Konfiguration; erlaubt immer Einladungsablauf
save_user() Erkennt und speichert Browser-Sprache bei Registrierung automatisch
get_login_redirect_url() Leitet nach Login zur Startseite weiter
get_signup_redirect_url() Leitet nach Registrierung zur Startseite weiter

CustomInvitationsAdapter

Benutzerdefinierte Einladungsunterstützung für Organisationseinladungen. Integriert das Einladungssystem mit django-allauth.

CustomMFAAdapter

Methode Zweck
get_totp_issuer() Gibt den TOTP-Ausstellernamen zurück, der in Authentifizierungs-Apps angezeigt wird
is_mfa_enabled() Prüft, ob der Benutzer aktive MFA-Authentifikatoren hat
can_delete_authenticator() Verhindert das Löschen des letzten Authentifikators, wenn MFA durch globale oder Organisationsrichtlinie erforderlich ist

Middleware

Speicherort: app/users/middleware.py

MFAEnforcementMiddleware

Setzt MFA-Anforderungen basierend auf globalen Einstellungen und Organisationsrichtlinien durch.

  • Globale MFA-Einstellungen (MFA_REQUIRED): none (Standard), staff oder all
  • Organisationsrichtlinie: Organisationen können MFA für ihre Mitglieder vorschreiben
  • Übergangsfrist: Benutzer erhalten eine konfigurierbare Anzahl von Tagen zur MFA-Einrichtung nach Kontoerstellung (Standard: 7 Tage)
  • Ausgenommene Pfade: MFA-Einrichtungsseiten, Logout, statische/Medien-Dateien, Admin-Panel, API-Endpunkte
  • OIDC-Ausnahme: Benutzer, die sich über OIDC-/Social-Provider authentifiziert haben, sind ausgenommen (ihr Identitätsanbieter übernimmt MFA)

Hilfsfunktionen

get_allow_self_registration()

Speicherort: app/users/utils.py:10

Liest ALLOW_SELF_REGISTRATION aus der bifolk.json-Konfigurationsdatei. Gibt boolean zurück (Standard: True).


URL-Konfiguration

Die Authentifizierung wird von django-allauth übernommen. Die Users-App hat keine eigene urls.py.

Profil-, Sprach-, Theme- und Changelog-Views sind über die Haupt-URL-Konfiguration (bifolk/urls.py) eingebunden:

URL View Name
/set-language/ set_language_and_save set_language
/profile/ profile profile
/set-theme/ set_theme set_theme
/changelog/dismiss/ dismiss_changelog dismiss_changelog

Siehe auch