feat: implementacao inicial do sistema LeadRadar
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
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
|
||||
Reference in New Issue
Block a user