from functools import wraps from flask import jsonify from flask_jwt_extended import get_jwt_identity, verify_jwt_in_request from app.extensions import db from app.models.user import User def get_current_user(): """ Retorna o objeto User autenticado no JWT atual. """ try: verify_jwt_in_request() user_id = get_jwt_identity() if not user_id: return None return db.session.get(User, user_id) except Exception: return None def admin_required(): """ Decorator que exige que o usuário autenticado tenha role == 'admin'. Caso contrário, bloqueia com 403 Forbidden. """ def decorator(fn): @wraps(fn) def wrapper(*args, **kwargs): verify_jwt_in_request() user_id = get_jwt_identity() user = db.session.get(User, user_id) if not user or not user.ativo: return jsonify({'error': 'Usuário inválido ou inativo.'}), 401 if user.role != 'admin': return jsonify({'error': 'Acesso negado. Requer perfil de administrador.'}), 403 return fn(*args, **kwargs) return wrapper return decorator