sync: 同步 sql-platform-pro 最新代码 — 权限体系安全修复 v0.8.1

- P0: 实例访问控制全线接入权限组 (829测试)
- P1: permissions字段激活 + 操作级权限检查 (843测试)
- 前端: 删除数据权限页面, 权限组合并为唯一入口
- 新增: CodeMirror编辑器 + 查询模板 + 慢查询分析
- 新增: MongoDB管理页面 + Dashboard增强
- 修复: Pydantic V2迁移 + 前端TS错误修复
This commit is contained in:
logan committed 2026-05-23 14:41:06 +08:00
1 parent 6fcd9465cf
commit 4c9427e546
105 files changed
+23680 -471

No files matched your search

+101
View File
@@ -0,0 +1,101 @@
"""执行相关 Schema — 工单执行报告和数据验证模型。"""
from typing import List, Optional
from pydantic import BaseModel, Field
class ExecutionReportResponse(BaseModel):
"""工单执行报告响应模型。
包含工单执行后的完整结果信息,用于 API 返回。
Attributes:
status: 执行状态(success / failed / partial)
affected_rows: 影响行数(SQL)或成功命令数(Redis)或修改文档数(MongoDB)
duration_ms: 执行耗时(毫秒)
validation_passed: 验证是否通过
warnings: 警告信息列表
errors: 错误信息列表
raw_output: 原始执行输出
before_snapshot_summary: 执行前快照摘要
after_snapshot_summary: 执行后快照摘要
"""
status: str = Field(..., description="执行状态: success / failed / partial")
affected_rows: int = Field(0, ge=0, description="影响行数")
duration_ms: int = Field(0, ge=0, description="执行耗时(毫秒)")
validation_passed: bool = Field(True, description="验证是否通过")
warnings: List[str] = Field(default_factory=list, description="警告信息")
errors: List[str] = Field(default_factory=list, description="错误信息")
raw_output: Optional[str] = Field(None, description="原始执行输出")
before_snapshot_summary: Optional[str] = Field(None, description="执行前快照摘要")
after_snapshot_summary: Optional[str] = Field(None, description="执行后快照摘要")
class Config:
json_schema_extra = {
"example": {
"status": "success",
"affected_rows": 3,
"duration_ms": 145,
"validation_passed": True,
"warnings": [],
"errors": [],
"raw_output": "[UPDATE users SET status='active' WHERE ...] 影响 3 行",
"before_snapshot_summary": "UPDATE 表 `users`: 将有 3 行被更新 (WHERE: status='inactive')",
"after_snapshot_summary": "表 `users`: 当前 150 行",
}
}
class RedisCommandRequest(BaseModel):
"""Redis 命令请求模型。"""
command: str = Field(..., min_length=1, description="Redis 命令")
db: int = Field(0, ge=0, le=15, description="数据库编号")
class RedisTicketContent(BaseModel):
"""Redis 工单内容模型(JSON 格式)。"""
commands: List[RedisCommandRequest] = Field(
..., min_length=1, description="命令列表"
)
class MongoOperationRequest(BaseModel):
"""MongoDB 操作请求模型。
支持的操作类型:
- insertOne / insertMany: 插入文档
- updateOne / updateMany: 更新文档
- deleteOne / deleteMany: 删除文档
- replaceOne: 替换文档
"""
collection: str = Field(..., min_length=1, description="集合名称")
operation: str = Field(
...,
pattern=r"^(insertOne|insertMany|updateOne|updateMany|deleteOne|deleteMany|replaceOne)$",
description="操作类型",
)
filter: Optional[dict] = Field(None, description="查询条件")
update: Optional[dict] = Field(None, description="更新内容")
document: Optional[dict] = Field(None, description="插入/替换的文档")
documents: Optional[List[dict]] = Field(None, description="批量插入的文档列表")
options: Optional[dict] = Field(None, description="额外选项")
class TicketExecuteResponse(BaseModel):
"""工单执行响应模型(API 返回)。"""
id: int = Field(..., description="工单ID")
title: str = Field(..., description="工单标题")
status: str = Field(..., description="工单状态")
db_type: str = Field(..., description="数据库类型")
execute_result: Optional[str] = Field(None, description="执行结果摘要")
execute_time: Optional[str] = Field(None, description="执行时间")
execution_report: Optional[ExecutionReportResponse] = Field(
None, description="详细执行报告"
)
message: Optional[str] = Field(None, description="提示消息")