from functools import wraps from datetime import datetime from bson import ObjectId from quart import jsonify from app.auth.quart_jwt import get_jwt_identity from app.models.user import User def make_serializable(obj): """Recursively convert MongoDB documents to JSON-serializable types.""" if isinstance(obj, dict): return {k: make_serializable(v) for k, v in obj.items()} elif isinstance(obj, list): return [make_serializable(item) for item in obj] elif isinstance(obj, ObjectId): return str(obj) elif isinstance(obj, datetime): return obj.isoformat() else: return obj def admin_required(f): @wraps(f) def decorated_function(*args, **kwargs): user_id = get_jwt_identity() user_data = User.find_by_id(user_id) if not user_data or user_data.get('role') != 'admin': return jsonify({"message": "Admin privileges required"}), 403 return f(*args, **kwargs) return decorated_function