Files
Mutual_Fund/api/deps.py
T
huangbq_0626 266705ff6c Merge branch 'develop' of http://47.106.207.27:3000/AI260626/Mutual_Fund into develop_feature_customer
# Conflicts:
#	.gitignore
#	api/deps.py
#	api/router.py
#	main.py
#	tests/test_customer_agent_router.py
#	tests/test_knowledge_router.py
2026-09-11 14:25:37 +08:00

52 lines
1.9 KiB
Python

"""路由级鉴权依赖:Bearer JWT → 校验 token → 按 user_id 回查 sys_user → 注入用户。"""
from fastapi import Depends, Request
from sqlalchemy.ext.asyncio import AsyncSession
from config.deps import get_db
from model.sys_user import SysUser
from repositories.sys_user import SysUserRepo
from service.auth import decode_token
from utils.exceptions import AuthError, ForbiddenError
KNOWLEDGE_OPERATOR_ROLES = {"ADMIN", "KNOWLEDGE_ADMIN", "KNOWLEDGE_OPERATOR", "运营"}
async def get_current_user(
request: Request, db: AsyncSession = Depends(get_db)
) -> SysUser:
header = request.headers.get("Authorization", "")
if not header.startswith("Bearer "):
raise AuthError()
try:
user_id = int(decode_token(header.removeprefix("Bearer "))["user_id"])
except Exception:
raise AuthError("Token 无效或已过期")
user = await SysUserRepo(db).get(user_id)
if user is None:
raise AuthError("用户不存在")
if user.status != "正常":
raise ForbiddenError("账号已被禁用或冻结")
return user
async def require_knowledge_operator(user: SysUser = Depends(get_current_user)) -> SysUser:
"""Allow only administrators or explicitly assigned knowledge operators."""
if user.user_type == "ADMIN":
return user
if user.user_type != "EMPLOYEE" or user.employee_role not in KNOWLEDGE_OPERATOR_ROLES:
raise ForbiddenError("仅运营人员可以管理知识库")
return user
async def require_knowledge_operator(
user: SysUser = Depends(get_current_user),
) -> SysUser:
"""Allow administrators and explicitly assigned knowledge operators."""
if user.user_type == "ADMIN":
return user
if user.user_type != "EMPLOYEE" or user.employee_role not in KNOWLEDGE_OPERATOR_ROLES:
raise ForbiddenError("仅运营人员可以管理知识库")
return user