🎉 Refactored backend structure: Removed unused files including app_cleaned.py, admin_api.py, admin.py, user.py, and others. Updated settings.local.json to include additional Bash commands. Enhanced admin templates for better navigation and functionality. Improved logging and error handling across various modules.
This commit is contained in:
@ -344,6 +344,17 @@ class User(UserMixin, Base):
|
||||
phone = Column(String(50), nullable=True) # Telefonnummer
|
||||
bio = Column(Text, nullable=True) # Kurze Beschreibung/Bio
|
||||
|
||||
# Benutzereinstellungen
|
||||
theme_preference = Column(String(20), default="auto") # auto, light, dark
|
||||
language_preference = Column(String(10), default="de") # de, en, etc.
|
||||
email_notifications = Column(Boolean, default=True)
|
||||
browser_notifications = Column(Boolean, default=True)
|
||||
dashboard_layout = Column(String(20), default="default") # default, compact, detailed
|
||||
compact_mode = Column(Boolean, default=False)
|
||||
show_completed_jobs = Column(Boolean, default=True)
|
||||
auto_refresh_interval = Column(Integer, default=30) # Sekunden
|
||||
auto_logout_timeout = Column(Integer, default=0) # Minuten, 0 = deaktiviert
|
||||
|
||||
jobs = relationship("Job", back_populates="user", foreign_keys="Job.user_id", cascade="all, delete-orphan")
|
||||
owned_jobs = relationship("Job", foreign_keys="Job.owner_id", overlaps="owner")
|
||||
permissions = relationship("UserPermission", back_populates="user", uselist=False, cascade="all, delete-orphan")
|
||||
@ -450,9 +461,65 @@ class User(UserMixin, Base):
|
||||
Aktualisiert den letzten Login-Zeitstempel.
|
||||
"""
|
||||
self.last_login = datetime.now()
|
||||
# Cache invalidieren
|
||||
invalidate_model_cache("User", self.id)
|
||||
|
||||
def has_permission(self, permission_name: str) -> bool:
|
||||
"""
|
||||
Überprüft, ob der Benutzer eine bestimmte Berechtigung hat.
|
||||
|
||||
Args:
|
||||
permission_name: Name der Berechtigung (z.B. 'CONTROL_PRINTER', 'START_JOBS', 'APPROVE_JOBS')
|
||||
|
||||
Returns:
|
||||
bool: True wenn Berechtigung vorhanden, sonst False
|
||||
"""
|
||||
# Administratoren haben alle Berechtigungen
|
||||
if self.is_admin:
|
||||
return True
|
||||
|
||||
# Inaktive Benutzer haben keine Berechtigungen
|
||||
if not self.is_active:
|
||||
return False
|
||||
|
||||
# Spezifische Berechtigungen
|
||||
if permission_name == 'ADMIN':
|
||||
return self.is_admin
|
||||
|
||||
# Überprüfe spezifische Berechtigungen über UserPermission
|
||||
if self.permissions:
|
||||
if permission_name == 'CONTROL_PRINTER':
|
||||
return self.permissions.can_start_jobs and not self.permissions.needs_approval
|
||||
elif permission_name == 'START_JOBS':
|
||||
return self.permissions.can_start_jobs
|
||||
elif permission_name == 'APPROVE_JOBS':
|
||||
return self.permissions.can_approve_jobs
|
||||
elif permission_name == 'NEEDS_APPROVAL':
|
||||
return self.permissions.needs_approval
|
||||
|
||||
# Fallback für unbekannte Berechtigungen - nur Administratoren erlaubt
|
||||
return False
|
||||
|
||||
def get_permission_level(self) -> str:
|
||||
"""
|
||||
Gibt das Berechtigungslevel des Benutzers zurück.
|
||||
|
||||
Returns:
|
||||
str: 'admin', 'advanced', 'standard', 'restricted'
|
||||
"""
|
||||
if self.is_admin:
|
||||
return 'admin'
|
||||
|
||||
if not self.is_active:
|
||||
return 'restricted'
|
||||
|
||||
if self.permissions:
|
||||
if self.permissions.can_approve_jobs:
|
||||
return 'advanced'
|
||||
elif self.permissions.can_start_jobs and not self.permissions.needs_approval:
|
||||
return 'standard'
|
||||
|
||||
return 'restricted'
|
||||
|
||||
|
||||
class Printer(Base):
|
||||
__tablename__ = "printers"
|
||||
|
Reference in New Issue
Block a user