33 lines
1.1 KiB
Python
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
|