Build lightweight AI agent admin
This commit is contained in:
@@ -0,0 +1,180 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Permission Schema - 权限数据验证模式
|
||||
"""
|
||||
from datetime import datetime
|
||||
from typing import Optional, List
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
||||
|
||||
from app.base_schema import CSTDatetime
|
||||
|
||||
|
||||
class PermissionBase(BaseModel):
|
||||
"""权限基础Schema"""
|
||||
menu_id: str = Field(..., description="菜单ID")
|
||||
name: str = Field(..., min_length=1, max_length=64, description="权限名称")
|
||||
code: str = Field(..., min_length=1, max_length=64, description="权限编码")
|
||||
permission_type: int = Field(default=0, description="权限类型(0-按钮权限, 1-API权限, 3-其他权限)")
|
||||
api_path: Optional[str] = Field(None, max_length=200, description="API路径")
|
||||
http_method: int = Field(default=0, description="HTTP方法(0-GET, 1-POST, 2-PUT, 3-DELETE, 4-PATCH, 5-ALL)")
|
||||
description: Optional[str] = Field(None, description="权限描述")
|
||||
is_active: bool = Field(default=True, description="是否启用")
|
||||
sort: int = Field(default=0, description="排序")
|
||||
|
||||
@field_validator("code")
|
||||
@classmethod
|
||||
def validate_code(cls, v):
|
||||
"""验证权限编码格式"""
|
||||
if not v:
|
||||
raise ValueError("权限编码不能为空")
|
||||
if not all(c.isalnum() or c in '_:' for c in v):
|
||||
raise ValueError("权限编码只能包含字母、数字、下划线和冒号")
|
||||
return v
|
||||
|
||||
@field_validator("http_method")
|
||||
@classmethod
|
||||
def validate_http_method(cls, v):
|
||||
"""验证HTTP方法"""
|
||||
if v not in [0, 1, 2, 3, 4, 5]:
|
||||
raise ValueError("HTTP方法必须在 0-5 之间")
|
||||
return v
|
||||
|
||||
@field_validator("permission_type")
|
||||
@classmethod
|
||||
def validate_permission_type(cls, v):
|
||||
"""验证权限类型"""
|
||||
if v not in [0, 1, 3]:
|
||||
raise ValueError("权限类型必须在 0, 1, 3 之间")
|
||||
return v
|
||||
|
||||
|
||||
class PermissionCreate(PermissionBase):
|
||||
"""权限创建Schema"""
|
||||
pass
|
||||
|
||||
|
||||
class PermissionUpdate(BaseModel):
|
||||
"""权限更新Schema - 所有字段可选"""
|
||||
menu_id: Optional[str] = Field(None, description="菜单ID")
|
||||
name: Optional[str] = Field(None, min_length=1, max_length=64, description="权限名称")
|
||||
code: Optional[str] = Field(None, min_length=1, max_length=64, description="权限编码")
|
||||
permission_type: Optional[int] = Field(None, description="权限类型")
|
||||
api_path: Optional[str] = Field(None, max_length=200, description="API路径")
|
||||
http_method: Optional[int] = Field(None, description="HTTP方法")
|
||||
description: Optional[str] = Field(None, description="权限描述")
|
||||
is_active: Optional[bool] = Field(None, description="是否启用")
|
||||
sort: Optional[int] = Field(None, description="排序")
|
||||
|
||||
@field_validator("code")
|
||||
@classmethod
|
||||
def validate_code(cls, v):
|
||||
"""验证权限编码格式"""
|
||||
if v is not None:
|
||||
if not v:
|
||||
raise ValueError("权限编码不能为空")
|
||||
if not all(c.isalnum() or c in '_:' for c in v):
|
||||
raise ValueError("权限编码只能包含字母、数字、下划线和冒号")
|
||||
return v
|
||||
|
||||
@field_validator("http_method")
|
||||
@classmethod
|
||||
def validate_http_method(cls, v):
|
||||
"""验证HTTP方法"""
|
||||
if v is not None and v not in [0, 1, 2, 3, 4, 5]:
|
||||
raise ValueError("HTTP方法必须在 0-5 之间")
|
||||
return v
|
||||
|
||||
@field_validator("permission_type")
|
||||
@classmethod
|
||||
def validate_permission_type(cls, v):
|
||||
"""验证权限类型"""
|
||||
if v is not None and v not in [0, 1, 3]:
|
||||
raise ValueError("权限类型必须在 0, 1, 3 之间")
|
||||
return v
|
||||
|
||||
|
||||
class PermissionResponse(BaseModel):
|
||||
"""权限响应Schema"""
|
||||
id: str
|
||||
menu_id: str
|
||||
menu_name: Optional[str] = None
|
||||
name: str
|
||||
code: str
|
||||
permission_type: int
|
||||
permission_type_display: Optional[str] = None
|
||||
api_path: Optional[str] = None
|
||||
http_method: int
|
||||
http_method_display: Optional[str] = None
|
||||
description: Optional[str] = None
|
||||
is_active: bool
|
||||
sort: int = 0
|
||||
is_deleted: bool = False
|
||||
sys_create_datetime: Optional[CSTDatetime] = None
|
||||
sys_update_datetime: Optional[CSTDatetime] = None
|
||||
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
|
||||
class PermissionSimple(BaseModel):
|
||||
"""权限简单输出"""
|
||||
id: str
|
||||
name: str
|
||||
code: str
|
||||
permission_type: int
|
||||
is_active: bool
|
||||
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
|
||||
class PermissionBatchDeleteIn(BaseModel):
|
||||
"""批量删除权限输入"""
|
||||
ids: List[str] = Field(..., description="要删除的权限ID列表")
|
||||
|
||||
|
||||
class PermissionBatchDeleteOut(BaseModel):
|
||||
"""批量删除权限输出"""
|
||||
count: int = Field(..., description="删除的记录数")
|
||||
|
||||
|
||||
class PermissionBatchUpdateStatusIn(BaseModel):
|
||||
"""批量更新权限状态输入"""
|
||||
ids: List[str] = Field(..., description="权限ID列表")
|
||||
is_active: bool = Field(..., description="是否启用")
|
||||
|
||||
|
||||
class PermissionBatchUpdateStatusOut(BaseModel):
|
||||
"""批量更新权限状态输出"""
|
||||
count: int = Field(..., description="更新的记录数")
|
||||
|
||||
|
||||
class PermissionSearchRequest(BaseModel):
|
||||
"""搜索权限请求"""
|
||||
keyword: str = Field(..., description="搜索关键词")
|
||||
|
||||
|
||||
class PermissionRouteItem(BaseModel):
|
||||
"""单个路由权限项"""
|
||||
path: str = Field(..., description="API路径")
|
||||
method: str = Field(..., description="HTTP方法")
|
||||
name: str = Field(..., description="权限名称")
|
||||
code: str = Field(..., description="权限编码")
|
||||
summary: Optional[str] = Field(None, description="权限描述")
|
||||
permission_type: int = Field(default=1, description="权限类型")
|
||||
http_method: int = Field(..., description="HTTP方法编码")
|
||||
is_active: bool = Field(default=True, description="是否启用")
|
||||
|
||||
|
||||
class PermissionBatchCreateFromRoutesIn(BaseModel):
|
||||
"""从路由批量创建权限输入"""
|
||||
menu_id: str = Field(..., description="菜单ID")
|
||||
routes: List[PermissionRouteItem] = Field(..., description="要创建的权限列表")
|
||||
|
||||
|
||||
class PermissionBatchCreateFromRoutesOut(BaseModel):
|
||||
"""从路由批量创建权限输出"""
|
||||
created: int = Field(..., description="创建的权限数")
|
||||
skipped: int = Field(..., description="跳过的权限数")
|
||||
failed: int = Field(..., description="失败的权限数")
|
||||
errors: List[str] = Field(default=[], description="错误信息列表")
|
||||
Reference in New Issue
Block a user