ForgeFlow-ERP/backend/app/schemas/system_permissions.py
2026-06-12 16:00:56 +08:00

161 lines
4.8 KiB
Python

from __future__ import annotations
from datetime import datetime
from pydantic import BaseModel, Field
class PermissionRead(BaseModel):
permission_id: int
permission_code: str
permission_name: str
module_code: str
action_code: str
status: str
class MenuPermissionNode(BaseModel):
permission_code: str
permission_name: str
children: list["MenuPermissionNode"] = Field(default_factory=list)
class OrgEmployeeNode(BaseModel):
employee_id: int
employee_name: str
mobile: str | None = None
job_title: str | None = None
username: str | None = None
role_names: list[str] = Field(default_factory=list)
status: str
class OrgNodeRead(BaseModel):
node_id: int
node_type: str
node_label: str
parent_id: int | None = None
dept_code: str
dept_type: str
manager_employee_id: int | None = None
manager_name: str | None = None
manager_employee_ids: list[int] = Field(default_factory=list)
manager_names: list[str] = Field(default_factory=list)
status: str
sort_no: int = 0
remark: str | None = None
employees: list[OrgEmployeeNode] = Field(default_factory=list)
children: list["OrgNodeRead"] = Field(default_factory=list)
class OrgNodeCreate(BaseModel):
parent_id: int | None = None
node_type: str = Field(pattern="^(COMPANY|BRANCH|DEPARTMENT|GROUP)$")
node_label: str = Field(min_length=1, max_length=100)
dept_code: str | None = Field(default=None, max_length=50)
dept_type: str = Field(default="ADMIN", max_length=32)
manager_employee_id: int | None = None
manager_employee_ids: list[int] = Field(default_factory=list)
sort_no: int = 0
remark: str | None = Field(default=None, max_length=255)
status: str = Field(default="ACTIVE", pattern="^(ACTIVE|INACTIVE)$")
class OrgNodeUpdate(BaseModel):
node_label: str = Field(min_length=1, max_length=100)
dept_type: str = Field(default="ADMIN", max_length=32)
manager_employee_id: int | None = None
manager_employee_ids: list[int] = Field(default_factory=list)
sort_no: int = 0
remark: str | None = Field(default=None, max_length=255)
status: str = Field(default="ACTIVE", pattern="^(ACTIVE|INACTIVE)$")
class OrgEmployeeBind(BaseModel):
employee_id: int = Field(gt=0)
sort_no: int = 0
class RoleRead(BaseModel):
role_id: int
role_code: str
role_name: str
role_scope: str
status: str
remark: str | None = None
permission_codes: list[str] = Field(default_factory=list)
user_count: int = 0
created_at: datetime | None = None
updated_at: datetime | None = None
class RoleCreate(BaseModel):
role_code: str = Field(min_length=2, max_length=50, pattern="^[A-Z][A-Z0-9_]*$")
role_name: str = Field(min_length=1, max_length=100)
role_scope: str = Field(default="SYSTEM", max_length=32)
status: str = Field(default="ACTIVE", pattern="^(ACTIVE|INACTIVE)$")
remark: str | None = Field(default=None, max_length=500)
permission_codes: list[str] = Field(default_factory=list)
class RoleUpdate(BaseModel):
role_name: str = Field(min_length=1, max_length=100)
role_scope: str = Field(default="SYSTEM", max_length=32)
status: str = Field(default="ACTIVE", pattern="^(ACTIVE|INACTIVE)$")
remark: str | None = Field(default=None, max_length=500)
permission_codes: list[str] = Field(default_factory=list)
class RolePermissionUpdate(BaseModel):
permission_codes: list[str] = Field(default_factory=list)
class SystemUserRead(BaseModel):
user_id: int
username: str
employee_id: int
employee_name: str
dept_id: int
dept_name: str | None = None
mobile: str | None = None
nickname: str | None = None
is_super_admin: bool = False
status: str
role_ids: list[int] = Field(default_factory=list)
role_names: list[str] = Field(default_factory=list)
last_login_at: datetime | None = None
created_at: datetime | None = None
updated_at: datetime | None = None
class SystemUserCreate(BaseModel):
employee_id: int = Field(gt=0)
role_ids: list[int] = Field(min_length=1)
password: str = Field(min_length=6, max_length=128)
status: str = Field(default="ACTIVE", pattern="^(ACTIVE|INACTIVE)$")
class SystemUserRoleUpdate(BaseModel):
role_ids: list[int] = Field(min_length=1)
class SystemUserStatusUpdate(BaseModel):
status: str = Field(pattern="^(ACTIVE|INACTIVE)$")
class SystemUserPasswordReset(BaseModel):
password: str = Field(min_length=6, max_length=128)
class EmployeeOption(BaseModel):
employee_id: int
employee_name: str
dept_id: int
dept_name: str | None = None
mobile: str | None = None
job_title: str | None = None
username: str | None = None
role_names: list[str] = Field(default_factory=list)
permission_codes: list[str] = Field(default_factory=list)
has_system_user: bool = False