from functools import wraps from ninja.errors import HttpError from functools import wraps from ninja.errors import HttpError def login_required(func): @wraps(func) def wrapper(request, *args, **kwargs): user = getattr(request, 'user', None) if not user or not user.is_authenticated: raise HttpError(401, "请先登录") return func(request, *args, **kwargs) return wrapper def manager_required(func): @wraps(func) def wrapper(request, *args, **kwargs): user = getattr(request, 'user', None) if not user or not user.is_authenticated or user.role not in ['admin', 'manager']: raise HttpError(403, "仅分管理或管理员可访问") return func(request, *args, **kwargs) return wrapper def admin_required(func): @wraps(func) def wrapper(request, *args, **kwargs): user = getattr(request, 'user', None) if not user or not user.is_authenticated or user.role != 'admin': raise HttpError(403, "仅管理员可访问") return func(request, *args, **kwargs) return wrapper