"""admin RBAC 角色 + 权限目录 schemas。""" from __future__ import annotations from pydantic import BaseModel, Field class PermissionPage(BaseModel): key: str label: str class PermissionGroup(BaseModel): group: str pages: list[PermissionPage] class RoleOut(BaseModel): id: int name: str # 角色 key(承重,不可变) label: str # 展示名(UI 显示) pages: list[str] # 有效可见页 key(super_admin = 全部页) is_builtin: bool # 内建角色(super_admin):不可编辑/删除 in_use: int # 使用该角色的管理员数(删除前端提示 / 拦截用) class RoleCreateRequest(BaseModel): # 新增自定义角色:name 即用户输入的名称(同时作 key 与展示名) name: str = Field(..., min_length=1, max_length=32) pages: list[str] = Field(default_factory=list) class RoleUpdateRequest(BaseModel): # 只改展示名 + 可见页;key 不可变 label: str | None = Field(None, min_length=1, max_length=32) pages: list[str] | None = None