File size: 1,433 Bytes
d488241 092e58d d488241 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
from functools import wraps
from flask import redirect, url_for, flash, jsonify
from flask_login import current_user
def admin_required(f):
"""Decorator to restrict access to admin users only."""
@wraps(f)
def decorated_function(*args, **kwargs):
if not current_user.is_authenticated or current_user.role != "admin":
flash("You do not have permission to access this page.", "error")
return redirect(url_for("dashboard.index"))
return f(*args, **kwargs)
return decorated_function
def login_required_json(f):
"""Decorator to require login for JSON API endpoints."""
@wraps(f)
def decorated_function(*args, **kwargs):
if not current_user.is_authenticated:
return jsonify({"error": "Login required"}), 401
return f(*args, **kwargs)
return decorated_function
def cache_response(timeout=60):
def decorator(f):
@wraps(f)
def decorated_function(*args, **kwargs):
from flask import request
from .. import cache
cache_key = f"{request.path}:{request.query_string}"
cached_response = cache.get(cache_key)
if cached_response:
return cached_response
response = f(*args, **kwargs)
cache.set(cache_key, response, timeout=timeout)
return response
return decorated_function
return decorator |