"""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, }