初始提交
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
import re
|
||||
from contextvars import ContextVar, Token
|
||||
from typing import Literal
|
||||
|
||||
from exceptions.exception import LoginException
|
||||
from module_admin.entity.vo.user_vo import CurrentUserModel
|
||||
|
||||
# 定义上下文变量
|
||||
# 存储当前请求的编译后的排除路由模式列表
|
||||
current_exclude_patterns: ContextVar[
|
||||
list[dict[str, str | list[Literal['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS']] | re.Pattern]] | None
|
||||
] = ContextVar('current_exclude_patterns', default=None)
|
||||
# 存储当前用户信息
|
||||
current_user: ContextVar[CurrentUserModel | None] = ContextVar('current_user', default=None)
|
||||
|
||||
|
||||
class RequestContext:
|
||||
"""
|
||||
请求上下文管理类,用于设置和清理上下文变量
|
||||
"""
|
||||
|
||||
@staticmethod
|
||||
def set_current_exclude_patterns(
|
||||
exclude_patterns: list[
|
||||
dict[str, str | list[Literal['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS']] | re.Pattern]
|
||||
],
|
||||
) -> Token:
|
||||
"""
|
||||
设置当前请求的编译后的排除路由模式列表
|
||||
|
||||
:param exclude_patterns: 编译后的排除路由模式列表
|
||||
:return: 上下文变量令牌,用于重置
|
||||
"""
|
||||
return current_exclude_patterns.set(exclude_patterns)
|
||||
|
||||
@staticmethod
|
||||
def get_current_exclude_patterns() -> list[
|
||||
dict[str, str | list[Literal['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS']] | re.Pattern]
|
||||
]:
|
||||
"""
|
||||
获取当前请求的编译后的排除路由模式列表
|
||||
|
||||
:return: 编译后的排除路由模式列表
|
||||
"""
|
||||
_exclude_patterns = current_exclude_patterns.get()
|
||||
if _exclude_patterns is None:
|
||||
_exclude_patterns = []
|
||||
return _exclude_patterns
|
||||
|
||||
@staticmethod
|
||||
def set_current_user(user: CurrentUserModel) -> Token:
|
||||
"""
|
||||
设置当前用户信息
|
||||
|
||||
:param user: 用户信息
|
||||
:return: 上下文变量令牌,用于重置
|
||||
"""
|
||||
return current_user.set(user)
|
||||
|
||||
@staticmethod
|
||||
def get_current_user() -> CurrentUserModel:
|
||||
"""
|
||||
获取当前用户信息
|
||||
|
||||
:return: 用户信息
|
||||
"""
|
||||
_current_user = current_user.get()
|
||||
if _current_user is None:
|
||||
raise LoginException(data='', message='当前用户信息为空,请检查是否已登录')
|
||||
return _current_user
|
||||
|
||||
@staticmethod
|
||||
def reset_current_exclude_patterns(token: Token) -> None:
|
||||
"""
|
||||
重置当前请求的编译后的排除路由模式列表
|
||||
|
||||
:param token: 设置编译后的排除路由模式列表时返回的令牌
|
||||
"""
|
||||
current_exclude_patterns.reset(token)
|
||||
|
||||
@staticmethod
|
||||
def reset_current_user(token: Token) -> None:
|
||||
"""
|
||||
重置当前用户信息
|
||||
|
||||
:param token: 设置用户信息时返回的令牌
|
||||
"""
|
||||
current_user.reset(token)
|
||||
|
||||
@staticmethod
|
||||
def clear_all() -> None:
|
||||
"""
|
||||
清除所有上下文变量
|
||||
"""
|
||||
current_exclude_patterns.set(None)
|
||||
current_user.set(None)
|
||||
Reference in New Issue
Block a user