06/15 Phase 4 + 5 codes

This commit is contained in:
2026-06-15 17:43:47 -04:00
parent f57a95013c
commit a9efd15a76
36 changed files with 1677 additions and 57 deletions
+2 -13
View File
@@ -1,21 +1,10 @@
"""RBAC decorators and shared request utilities."""
"""RBAC decorators. Never trust the client; gate on server side."""
from functools import wraps
from urllib.parse import urlparse
from flask import abort, request
from flask import abort
from flask_login import current_user
from app.models.enums import Role
def safe_referrer(fallback: str) -> str:
"""Return request.referrer only when it is same-origin; else fallback."""
ref = request.referrer
if ref:
parsed = urlparse(ref)
if parsed.netloc in ("", request.host):
return ref
return fallback
def role_required(*roles):
"""Require the current user to hold one of the given roles."""
def decorator(fn):