31 lines
1.0 KiB
Python
31 lines
1.0 KiB
Python
"""
|
|
control/panel/decorators.py
|
|
----------------------------
|
|
Access-control decorator for the superadmin control panel (MT-4).
|
|
"""
|
|
|
|
from functools import wraps
|
|
from flask import session, redirect, url_for, request, flash
|
|
|
|
from control.base import control_session
|
|
from control.models import Superadmin
|
|
|
|
|
|
def superadmin_required(f):
|
|
"""Redirect to /login if the session has no valid superadmin."""
|
|
@wraps(f)
|
|
def decorated(*args, **kwargs):
|
|
sa_id = session.get('sa_id')
|
|
if not sa_id:
|
|
flash('Please log in.', 'warning')
|
|
return redirect(url_for('auth.login', next=request.path))
|
|
# Re-validate: account might have been deactivated since login.
|
|
with control_session() as s:
|
|
sa = s.get(Superadmin, sa_id)
|
|
if sa is None or not sa.active:
|
|
session.clear()
|
|
flash('Your superadmin account is no longer active.', 'danger')
|
|
return redirect(url_for('auth.login'))
|
|
return f(*args, **kwargs)
|
|
return decorated
|