fix: delete agent 500 error + dynamic personality + deployment guide
- Fix delete agent 500: clean up FK records (agent_llm_logs, permissions, schedules, executions, team_members) and unbind goals/tasks before delete - Remove hardcoded personality templates in Android, replace with dynamic system prompt generation from name + description - Set promptSectionsEnabled=false to bypass PromptComposer for personality - Add Tencent Cloud Linux deployment guide (Docker Compose) - Accumulated backend service updates, frontend UI fixes, Android app changes Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
64
backend/app/api/deps.py
Normal file
64
backend/app/api/deps.py
Normal file
@@ -0,0 +1,64 @@
|
||||
"""
|
||||
FastAPI 依赖注入 — Workspace 上下文、权限检查
|
||||
"""
|
||||
from dataclasses import dataclass
|
||||
from typing import Optional
|
||||
|
||||
from fastapi import Depends, HTTPException, Request
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.core.database import get_db
|
||||
from app.core.security import decode_access_token
|
||||
from app.models.user import User
|
||||
|
||||
|
||||
@dataclass
|
||||
class WorkspaceContext:
|
||||
"""工作区上下文 — 包装当前用户 + 当前工作区 ID"""
|
||||
user: User
|
||||
workspace_id: str
|
||||
|
||||
|
||||
def get_current_workspace_id(request: Request) -> str:
|
||||
"""从 JWT 的 `ws` 字段提取当前工作区 ID。"""
|
||||
auth_header = request.headers.get("Authorization", "")
|
||||
if not auth_header.startswith("Bearer "):
|
||||
raise HTTPException(status_code=401, detail="未提供有效的认证令牌")
|
||||
|
||||
token = auth_header[7:]
|
||||
payload = decode_access_token(token)
|
||||
if payload is None:
|
||||
raise HTTPException(status_code=401, detail="无效的访问令牌")
|
||||
|
||||
ws_id = payload.get("ws")
|
||||
if not ws_id:
|
||||
raise HTTPException(status_code=400, detail="令牌中未包含工作区信息,请重新登录")
|
||||
|
||||
return ws_id
|
||||
|
||||
|
||||
def get_workspace_context(
|
||||
request: Request,
|
||||
db: Session = Depends(get_db),
|
||||
) -> WorkspaceContext:
|
||||
"""获取完整的 Workspace 上下文(用户 + 工作区),用于需要 workspace 过滤的接口。"""
|
||||
auth_header = request.headers.get("Authorization", "")
|
||||
if not auth_header.startswith("Bearer "):
|
||||
raise HTTPException(status_code=401, detail="未提供有效的认证令牌")
|
||||
|
||||
token = auth_header[7:]
|
||||
payload = decode_access_token(token)
|
||||
if payload is None:
|
||||
raise HTTPException(status_code=401, detail="无效的访问令牌")
|
||||
|
||||
user_id = payload.get("sub")
|
||||
ws_id = payload.get("ws")
|
||||
|
||||
if not user_id:
|
||||
raise HTTPException(status_code=401, detail="无效的访问令牌")
|
||||
|
||||
user = db.query(User).filter(User.id == user_id).first()
|
||||
if not user:
|
||||
raise HTTPException(status_code=401, detail="用户不存在")
|
||||
|
||||
return WorkspaceContext(user=user, workspace_id=ws_id or "")
|
||||
Reference in New Issue
Block a user