Files
leadradar/backend/app/utils/rbac.py
T

38 lines
1.2 KiB
Python

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