- P0: 实例访问控制全线接入权限组 (829测试) - P1: permissions字段激活 + 操作级权限检查 (843测试) - 前端: 删除数据权限页面, 权限组合并为唯一入口 - 新增: CodeMirror编辑器 + 查询模板 + 慢查询分析 - 新增: MongoDB管理页面 + Dashboard增强 - 修复: Pydantic V2迁移 + 前端TS错误修复
74 lines
2.5 KiB
Python
74 lines
2.5 KiB
Python
from datetime import datetime
|
|
from pydantic import BaseModel, ConfigDict, Field
|
|
from typing import Optional, Literal, List, Any
|
|
|
|
|
|
class WorkflowStage(BaseModel):
|
|
stage: str = Field(..., description="阶段名称,如:提交阶段、审核阶段、执行阶段")
|
|
role: str = Field(..., description="角色,如:提交人、开发负责人、执行人")
|
|
assignee: Optional[str] = Field(None, description="负责人用户名")
|
|
|
|
|
|
class MaskFieldRule(BaseModel):
|
|
table: str = Field(..., description="表名")
|
|
field: str = Field(..., description="字段名")
|
|
rule: str = Field(default="mask", description="脱敏规则:mask/hide/hash")
|
|
|
|
|
|
class InstanceCreate(BaseModel):
|
|
name: str = Field(..., min_length=1, max_length=100)
|
|
db_type: Literal["mysql", "postgres", "redis", "mongo"]
|
|
host: str = Field(..., min_length=1)
|
|
port: int = Field(..., ge=1, le=65535)
|
|
username: str = Field(..., min_length=1)
|
|
password: str = Field(..., min_length=1)
|
|
database: Optional[str] = None
|
|
env: Literal["production", "staging", "development"] = "development"
|
|
description: Optional[str] = None
|
|
access_mode: Literal["readwrite", "read", "write"] = "readwrite"
|
|
workflow: Optional[List[WorkflowStage]] = None
|
|
excluded_databases: Optional[List[str]] = None
|
|
mask_fields: Optional[List[MaskFieldRule]] = None
|
|
|
|
|
|
class InstanceUpdate(BaseModel):
|
|
name: Optional[str] = None
|
|
host: Optional[str] = None
|
|
port: Optional[int] = Field(default=None, ge=1, le=65535)
|
|
username: Optional[str] = None
|
|
password: Optional[str] = None
|
|
database: Optional[str] = None
|
|
env: Optional[Literal["production", "staging", "development"]] = None
|
|
description: Optional[str] = None
|
|
access_mode: Optional[Literal["readwrite", "read", "write"]] = None
|
|
workflow: Optional[List[WorkflowStage]] = None
|
|
excluded_databases: Optional[List[str]] = None
|
|
mask_fields: Optional[List[MaskFieldRule]] = None
|
|
|
|
|
|
class InstanceResponse(BaseModel):
|
|
id: int
|
|
name: str
|
|
db_type: str
|
|
host: str
|
|
port: int
|
|
username: str
|
|
database: Optional[str] = None
|
|
env: str
|
|
description: Optional[str] = None
|
|
status: str
|
|
version: Optional[str] = None
|
|
access_mode: str = "readwrite"
|
|
workflow: Optional[List[dict]] = None
|
|
excluded_databases: Optional[List[str]] = None
|
|
mask_fields: Optional[List[dict]] = None
|
|
created_at: datetime
|
|
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
|
|
class ConnectionTestResult(BaseModel):
|
|
success: bool
|
|
message: str
|
|
version: Optional[str] = None
|