zy-b / utils /dependency_util.py
spongyicybulk's picture
Deploy zy-b backend
96cbd66 verified
Raw
History Blame Contribute Delete
1.81 kB
from fastapi import Request
from common.context import RequestContext
from config.env import AppConfig
from exceptions.exception import PermissionException
class DependencyUtil:
"""
依赖项工具类
"""
@classmethod
def check_exclude_routes(cls, request: Request, err_msg: str = '当前路由不在认证规则内,不可使用该依赖项') -> None:
"""
检查路径和方法是否匹配排除路由模式
:param request: 请求对象
:param err_msg: 错误信息
:return: None
"""
# 获取当前请求路径和方法
path = request.url.path
method = request.method.upper()
# 从配置中获取APP_ROOT_PATH
app_root_path = AppConfig.app_root_path
# 去掉APP_ROOT_PATH前缀
if app_root_path and path.startswith(app_root_path):
path = path[len(app_root_path) :]
# 获取编译后的排除路由模式列表
exclude_patterns = RequestContext.get_current_exclude_patterns()
# 检查当前路由是否在排除路由列表中
if path and method and exclude_patterns:
for item in exclude_patterns:
pattern = item['pattern']
exclude_methods = item['methods']
ignore_paths = item['ignore_paths']
# 检查当前路径是否在忽略列表中
if path in ignore_paths:
continue
# 检查路径是否匹配,并且methods为空列表(匹配所有方法)或者当前方法在允许列表中
if pattern.match(path) and (not exclude_methods or method in exclude_methods):
raise PermissionException(data='', message=err_msg)