"""
app/utils/decorators.py – Decoradores de control de acceso por rol.
"""
from functools import wraps
from flask import abort
from flask_login import current_user


def role_required(*roles):
    """
    Decorador que restringe el acceso a usuarios con alguno de los roles indicados.
    Uso: @role_required('Administrador') o @role_required('Administrador', 'Desarrollador')
    """
    def decorator(f):
        @wraps(f)
        def decorated_function(*args, **kwargs):
            if not current_user.is_authenticated:
                abort(401)
            if current_user.rol.nombre not in roles:
                abort(403)
            return f(*args, **kwargs)
        return decorated_function
    return decorator
