File size: 1,299 Bytes
37ebcd6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from functools import wraps
from flask import redirect, url_for, flash
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):
    """Decorator to cache the response of a view for a given time."""
    @wraps(f)
    def decorated_function(*args, **kwargs):
        cache_key = request.path
        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