- Permissions 100% depuis user_permissions (plus de hardcode) - Middleware injecte perms dans chaque requête - Créneaux auto: 09h-12h30 / 14h-16h45, pas 15min, hprod lun-mar, prod mer-jeu - Assignations par défaut: par domaine, app_type, zone, serveur (table default_assignments) - Auto-liaison app_group: même intervenant recette+prod - Audit Splunk: /var/log/patchcenter_audit.json (JSON one-line par event) - Login/logout/campagnes/prereqs loggés en base + fichier - Page erreur maintenance (500/404) avec contact SecOps - Accents français dans toute lUI - Operator affiché comme Intervenant - Session 1h, redirect / vers dashboard si connecté - Demo mode prereqs (DEMO_MODE=True) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
61 lines
1.5 KiB
Python
61 lines
1.5 KiB
Python
"""Dependances communes pour les routers"""
|
|
from fastapi import Request
|
|
from sqlalchemy import text
|
|
from .auth import decode_token
|
|
from .database import SessionLocal
|
|
|
|
|
|
def get_db():
|
|
db = SessionLocal()
|
|
try:
|
|
yield db
|
|
finally:
|
|
db.close()
|
|
|
|
|
|
def get_current_user(request: Request):
|
|
"""Extrait l'utilisateur du cookie JWT"""
|
|
token = request.cookies.get("access_token")
|
|
if not token:
|
|
return None
|
|
return decode_token(token)
|
|
|
|
|
|
def get_user_perms(db, user):
|
|
"""Charge les permissions depuis la base pour un user.
|
|
Retourne un dict {module: level} ex: {'servers': 'admin', 'campaigns': 'edit'}"""
|
|
if not user:
|
|
return {}
|
|
uid = user.get("uid")
|
|
if not uid:
|
|
return {}
|
|
rows = db.execute(text(
|
|
"SELECT module, level FROM user_permissions WHERE user_id = :uid"
|
|
), {"uid": uid}).fetchall()
|
|
return {r.module: r.level for r in rows}
|
|
|
|
|
|
def can_view(perms, module):
|
|
"""L'utilisateur peut-il voir ce module ?"""
|
|
return module in perms
|
|
|
|
|
|
def can_edit(perms, module):
|
|
"""L'utilisateur peut-il editer ce module ?"""
|
|
return perms.get(module) in ("edit", "admin")
|
|
|
|
|
|
def can_admin(perms, module):
|
|
"""L'utilisateur a-t-il les droits admin sur ce module ?"""
|
|
return perms.get(module) == "admin"
|
|
|
|
|
|
def base_context(request, db, user):
|
|
"""Context de base pour tous les templates (user + perms)"""
|
|
perms = get_user_perms(db, user)
|
|
return {
|
|
"request": request,
|
|
"user": user,
|
|
"perms": perms,
|
|
}
|