33 lines
1.2 KiB
Python
33 lines
1.2 KiB
Python
from functools import wraps
|
|
from flask import request, jsonify
|
|
import jwt
|
|
import os
|
|
|
|
def token_required(f):
|
|
@wraps(f)
|
|
def decorated(*args, **kwargs):
|
|
# ⬇️ MOVE DE ACÁ LA IMPORTACIÓN DEL MODELO ⬇️
|
|
from app.models.user import User
|
|
|
|
token = request.headers.get('Authorization')
|
|
if not token:
|
|
return jsonify({'message': 'Token faltante'}), 401
|
|
try:
|
|
token = token.split(" ")[1] if " " in token else token
|
|
data = jwt.decode(token, os.environ.get('JWT_SECRET_KEY'), algorithms=["HS256"])
|
|
current_user = User.query.get(data['user_id'])
|
|
except Exception as e:
|
|
return jsonify({'message': 'Token inválido o expirado'}), 401
|
|
|
|
return f(current_user, *args, **kwargs)
|
|
return decorated
|
|
|
|
def has_permission(required_permission):
|
|
def decorator(f):
|
|
@wraps(f)
|
|
def decorated_function(current_user, *args, **kwargs):
|
|
if not current_user.role or required_permission not in current_user.role.permissions:
|
|
return jsonify({'message': 'No tenés permisos para realizar esta acción'}), 403
|
|
return f(current_user, *args, **kwargs)
|
|
return decorated_function
|
|
return decorator |