bifroest/app/identity/__init__.py
2026-10-27 08:34:17 +01:00

21 lines
714 B
Python

"""Identität: einheitliches Principal-Modell, unabhängig vom Anmeldeweg (→ Konzept 5.1).
Fachliche Berechtigungen hängen nur am Principal, nie an der Demo-Anmeldung.
Ein späterer OIDC-/Keycloak-Provider liefert denselben Principal.
"""
from dataclasses import dataclass, field
@dataclass(frozen=True)
class Principal:
user_id: int
username: str
display_name: str
is_admin: bool = False
team_ids: frozenset[int] = field(default_factory=frozenset)
# Solange gesetzt, ist nur das Ändern des Passworts erlaubt
must_change_password: bool = False
# Sitzung (für Abmelden und CSRF); leer außerhalb von Web-Anfragen, z. B. im Worker
session_id: str = ""
csrf: str = ""