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="行编辑模式")