TS-ResHub/utils/permissions.py

33 lines
1.1 KiB
Python

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