feat: add admin session rbac foundation

This commit is contained in:
duanshuwen committed 2026-08-25 22:47:59 +08:00
1 parent 8f000811a8
commit 2cdf7f9d7a
22 files changed
+1945 -68

No files matched your search

+81
View File
@@ -658,3 +658,84 @@ class ConciergeAdvisorPatch(BaseModel):
@classmethod
def normalize_patch_details(cls, value: list[dict[str, str]]) -> list[dict[str, str]]:
return [ConciergeDetailIn.model_validate(detail).model_dump() for detail in value]
DataScope = Literal["all", "dept", "dept_and_children", "custom_dept", "self"]
MenuType = Literal["directory", "page", "button"]
class AdminRoleCreate(BaseModel):
name: str = Field(min_length=1, max_length=80)
code: str = Field(min_length=1, max_length=80, pattern=r"^[a-z][a-z0-9_:-]*$")
dataScope: DataScope = "self"
description: str | None = Field(default=None, max_length=500)
isActive: bool = True
menuIds: list[str] = Field(default_factory=list, max_length=500)
deptIds: list[str] = Field(default_factory=list, max_length=500)
class AdminRolePatch(BaseModel):
name: str | None = Field(default=None, min_length=1, max_length=80)
code: str | None = Field(default=None, min_length=1, max_length=80, pattern=r"^[a-z][a-z0-9_:-]*$")
dataScope: DataScope | None = None
description: str | None = Field(default=None, max_length=500)
isActive: bool | None = None
menuIds: list[str] | None = Field(default=None, max_length=500)
deptIds: list[str] | None = Field(default=None, max_length=500)
class AdminMenuCreate(BaseModel):
parentId: str | None = None
name: str = Field(min_length=1, max_length=80)
type: MenuType = "page"
path: str | None = Field(default=None, max_length=200)
componentKey: str | None = Field(default=None, max_length=120)
permissionCode: str | None = Field(default=None, max_length=120)
icon: str | None = Field(default=None, max_length=80)
sortOrder: int = Field(default=0, ge=0)
isVisible: bool = True
isActive: bool = True
class AdminMenuPatch(BaseModel):
parentId: str | None = None
name: str | None = Field(default=None, min_length=1, max_length=80)
type: MenuType | None = None
path: str | None = Field(default=None, max_length=200)
componentKey: str | None = Field(default=None, max_length=120)
permissionCode: str | None = Field(default=None, max_length=120)
icon: str | None = Field(default=None, max_length=80)
sortOrder: int | None = Field(default=None, ge=0)
isVisible: bool | None = None
isActive: bool | None = None
class AdminDepartmentCreate(BaseModel):
parentId: str | None = None
name: str = Field(min_length=1, max_length=120)
sortOrder: int = Field(default=0, ge=0)
isActive: bool = True
class AdminDepartmentPatch(BaseModel):
parentId: str | None = None
name: str | None = Field(default=None, min_length=1, max_length=120)
sortOrder: int | None = Field(default=None, ge=0)
isActive: bool | None = None
class AdminUserCreate(BaseModel):
email: EmailStr
name: str = Field(min_length=1, max_length=80)
password: str = Field(min_length=8, max_length=128)
isActive: bool = True
roleIds: list[str] = Field(default_factory=list, max_length=100)
deptIds: list[str] = Field(default_factory=list, max_length=100)
class AdminUserPatch(BaseModel):
name: str | None = Field(default=None, min_length=1, max_length=80)
password: str | None = Field(default=None, min_length=8, max_length=128)
isActive: bool | None = None
roleIds: list[str] | None = Field(default=None, max_length=100)
deptIds: list[str] | None = Field(default=None, max_length=100)