Files
server-core/app/api/schemas/admin.py
T
Pine ec482bda51 移除未使用的 s2s 实时语音栈及重依赖,大幅加速镜像构建
- 删除 app/park/vendor/s2s-cloud(201 文件)与 s2s_bridge.py
- 清理 app.py/config.py/routers.py/rag.py/tools.py 中 s2s 相关代码与配置
- park_config 智能体提示词配置改名 PARK_AGENT_INSTRUCTIONS(原 S2S_INSTRUCTIONS,仍被园区 AI 问答使用)
- pyproject 移除 torch/transformers/scipy/soundfile/nltk/openai(均仅 s2s 使用,Linux 下 torch CUDA 依赖曾致镜像构建下载 4-6GB、耗时 300s+)
- 重新生成 uv.lock(移除 torch 等 40+ 传递依赖)
- 修复 app/api/schemas/admin.py 缺失 Database import(3.14 延迟注解掩盖的既有 bug,3.12 下启动必崩)
- .python-version 同步为 3.12(与镜像一致)
2026-09-08 22:18:52 +08:00

84 lines
2.8 KiB
Python

from pydantic import BaseModel, Field
from app.infrastructure.repositories import Database
class SetUserRoleRequest(BaseModel):
role: str
sub_role: str | None = None
org_id: str | None = None
region_id: str | None = None
class SetUserStatusRequest(BaseModel):
status: str = "active" # active | disabled
class UserClassificationRequest(BaseModel):
"""用户 认证状态/所属/账号类型 分类字段。"""
certification_status: str | None = None # uncertified|pending|certified|rejected
certification_time: str | None = None
affiliation: str | None = None # independent|park
park_id: str | None = None
park_name: str | None = None
account_type: str | None = None # opc_default|park_staff|platform_staff|provider|enterprise
class UpdateUserRequest(BaseModel):
nickname: str | None = None
role: str | None = None
sub_role: str | None = None
org_id: str | None = None
region_id: str | None = None
class UserCreateRequest(BaseModel):
"""管理员建号:账号由系统随机生成(不可指定),手机号必填且全局唯一。"""
phone: str # 手机号(必填,11 位大陆手机号)
password: str
nickname: str = ""
role: str = "opc_member"
sub_role: str | None = None
org_id: str | None = None
region_id: str | None = None
class BindPhoneRequest(BaseModel):
"""为已有用户绑定/更换手机号。"""
phone: str
class RolePermissionRequest(BaseModel):
permissions: list[str] = []
async def _validate_role_assignment(db: Database, actor: dict, role: str, sub_role: str | None) -> None:
"""白名单 + 提权防护:拒绝非法角色组合,及无权者创建/提升特权角色。"""
key = role if not sub_role else f"{role}|{sub_role}"
if not await db.roles.role_exists(role):
raise HTTPException(status_code=400, detail=f"无效角色: {role}")
if sub_role and not await db.roles.role_exists(f"{role}|{sub_role}"):
raise HTTPException(status_code=400, detail=f"无效角色组合: {key}")
# 目标角色若授予「配置角色权限」,仅持该权限者(超管)可创建/分配
if "action:role.grant_perm" in await db.roles.permissions_for(role, sub_role) and \
"action:role.grant_perm" not in actor.get("permissions", []):
raise HTTPException(
status_code=403,
detail="无权创建/分配特权角色(仅超级管理员)",
)
class OpcCertReviewRequest(BaseModel):
status: str = "certified" # certified | rejected
comment: str = ""
class ParkAdmissionReviewRequest(BaseModel):
status: str = "approved" # approved | rejected | reviewing
comment: str = ""
class ParkTransferReviewRequest(BaseModel):
status: str = "approved" # approved | rejected | reviewing
comment: str = ""