fb / app /utils /decorators.py
rastof9's picture
Saving local changes before rebase
092e58d
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