Files
ai-agent-admin/backend-fastapi/zq_smart_table/permission/schema.py
T

123 lines
3.8 KiB
Python

from typing import Optional, List, Any, Dict
from pydantic import BaseModel, ConfigDict, Field
from app.base_schema import CSTDatetime
# ==================== Role ====================
class SmartTableRoleCreate(BaseModel):
name: str = Field(..., min_length=1, max_length=64, description="角色名称")
role_type: str = Field(default="custom", description="角色类型")
capabilities: Dict[str, bool] = Field(default_factory=dict, description="能力配置")
class SmartTableRoleUpdate(BaseModel):
name: Optional[str] = Field(None, min_length=1, max_length=64, description="角色名称")
capabilities: Optional[Dict[str, bool]] = Field(None, description="能力配置")
class SmartTableRoleResponse(BaseModel):
id: str
table_id: Optional[str] = None
name: str
role_type: str
capabilities: Dict[str, bool] = {}
is_system: bool = False
sys_create_datetime: Optional[CSTDatetime] = None
model_config = ConfigDict(from_attributes=True)
# ==================== Collaborator ====================
class CollaboratorCreate(BaseModel):
subject_type: str = Field(..., description="授权对象类型: user/dept/role")
subject_id: str = Field(..., description="授权对象ID")
role_id: str = Field(..., description="表角色ID")
class CollaboratorUpdate(BaseModel):
role_id: str = Field(..., description="表角色ID")
class CollaboratorResponse(BaseModel):
id: str
table_id: str
subject_type: str
subject_id: str
role_id: str
role_name: Optional[str] = None
role_type: Optional[str] = None
subject_name: Optional[str] = None
subject_avatar: Optional[str] = None
sys_create_datetime: Optional[CSTDatetime] = None
model_config = ConfigDict(from_attributes=True)
# ==================== Field Permission ====================
class FieldPermItem(BaseModel):
field_id: str = Field(..., description="字段ID")
access: str = Field(default="write", description="访问级别: write/read/hidden")
class FieldPermBatchUpdate(BaseModel):
role_id: str = Field(..., description="表角色ID")
permissions: List[FieldPermItem] = Field(..., description="列权限列表")
class FieldPermResponse(BaseModel):
id: str
table_id: str
role_id: str
field_id: str
access: str = "write"
model_config = ConfigDict(from_attributes=True)
class FieldPermMatrix(BaseModel):
"""列权限矩阵:按角色分组"""
role_id: str
role_name: str
role_type: str
fields: List[FieldPermItem] = []
# ==================== Row Rule ====================
class RowRuleUpdate(BaseModel):
role_id: str = Field(..., description="表角色ID")
rule_type: str = Field(..., description="规则类型: view/edit")
mode: str = Field(default="all", description="模式: all/conditions/creator_only")
conditions: List[Dict[str, Any]] = Field(default_factory=list, description="过滤条件")
class RowRuleResponse(BaseModel):
id: str
table_id: str
role_id: str
rule_type: str
mode: str = "all"
conditions: List[Dict[str, Any]] = []
model_config = ConfigDict(from_attributes=True)
# ==================== My Permission ====================
class MyPermissionResponse(BaseModel):
"""当前用户对某表的有效权限"""
role_type: str = Field(description="角色类型: owner/manager/editor/viewer/custom/superadmin")
role_name: str = Field(description="角色名称")
capabilities: Dict[str, bool] = Field(default_factory=dict, description="能力配置")
field_permissions: Dict[str, str] = Field(
default_factory=dict,
description="列权限映射: fieldId -> write/read/hidden"
)
row_view_mode: str = Field(default="all", description="行查看模式")
row_edit_mode: str = Field(default="all", description="行编辑模式")