From 1a626a9020181890bd79f373db6446dc4e9eeb1a Mon Sep 17 00:00:00 2001 From: wren <“porlong@qq.com”> Date: Mon, 11 May 2026 02:17:50 +0800 Subject: [PATCH] fix: add rbac organization tree contracts --- .../fastapi_leaudit/domian/vo/rbacAdminVo.py | 49 +++++++++++++++++++ .../services/rbacAdminService.py | 6 +++ 2 files changed, 55 insertions(+) diff --git a/fastapi_modules/fastapi_leaudit/domian/vo/rbacAdminVo.py b/fastapi_modules/fastapi_leaudit/domian/vo/rbacAdminVo.py index 14dc1d9..030816e 100644 --- a/fastapi_modules/fastapi_leaudit/domian/vo/rbacAdminVo.py +++ b/fastapi_modules/fastapi_leaudit/domian/vo/rbacAdminVo.py @@ -53,6 +53,7 @@ class UserVO(BaseModel): roles: list[UserRoleVO] = Field(default_factory=list, description="角色列表") tenant_name: str | None = Field(None, description="租户名称") dep_name: str | None = Field(None, description="部门名称") + dep_short_name: str | None = Field(None, description="部门简称") class UserListVO(BaseModel): @@ -64,6 +65,53 @@ class UserListVO(BaseModel): items: list[UserVO] = Field(default_factory=list, description="用户列表") +class OrganizationPathVO(BaseModel): + """用户组织路径。""" + + tenant_name: str = Field("", description="租户名称") + dep_name: str = Field("", description="部门名称") + dep_short_name: str = Field("", description="部门简称") + ou_name: str = Field("", description="组织名称") + + +class OrganizationTreeUserVO(BaseModel): + """组织树节点中的用户。""" + + id: int = Field(..., description="用户ID") + username: str = Field(..., description="用户名") + nick_name: str = Field(..., description="姓名") + area: str | None = Field(None, description="地区") + ou_id: str = Field("", description="组织ID") + ou_name: str = Field("", description="组织名称") + is_leader: bool = Field(False, description="是否负责人") + status: int = Field(0, description="状态") + tenant_name: str | None = Field(None, description="租户名称") + dep_name: str | None = Field(None, description="部门名称") + dep_short_name: str | None = Field(None, description="部门简称") + email: str | None = Field(None, description="邮箱") + phone_number: str | None = Field(None, description="手机号") + organization_path: OrganizationPathVO | None = Field(None, description="组织路径") + + +class OrganizationNodeVO(BaseModel): + """组织树节点。""" + + ou_id: str = Field(..., description="节点ID") + ou_name: str = Field(..., description="节点名称") + parent_ou_id: str | None = Field(None, description="父节点ID") + level: int = Field(1, description="层级") + children: list["OrganizationNodeVO"] = Field(default_factory=list, description="子节点") + users: list[OrganizationTreeUserVO] = Field(default_factory=list, description="节点用户") + + +class OrganizationTreeVO(BaseModel): + """组织树响应。""" + + organizations: list[OrganizationNodeVO] = Field(default_factory=list, description="组织树") + total_organizations: int = Field(0, description="组织节点总数") + total_users: int = Field(0, description="用户总数") + + class RoutePermissionVO(BaseModel): """路由关联的 API 权限。""" @@ -157,3 +205,4 @@ class RoutePermissionsVO(BaseModel): RouteVO.model_rebuild() +OrganizationNodeVO.model_rebuild() diff --git a/fastapi_modules/fastapi_leaudit/services/rbacAdminService.py b/fastapi_modules/fastapi_leaudit/services/rbacAdminService.py index 66419a2..73d5c05 100644 --- a/fastapi_modules/fastapi_leaudit/services/rbacAdminService.py +++ b/fastapi_modules/fastapi_leaudit/services/rbacAdminService.py @@ -10,6 +10,7 @@ from fastapi_modules.fastapi_leaudit.domian.Dto.rbacAdminDto import ( RoleUpdateDTO, ) from fastapi_modules.fastapi_leaudit.domian.vo.rbacAdminVo import ( + OrganizationTreeVO, RoleAccessSaveVO, RoleListVO, RolePermissionsVO, @@ -51,6 +52,11 @@ class IRbacAdminService(ABC): """查询用户列表。""" ... + @abstractmethod + async def GetOrganizationTree(self, CurrentUserId: int, IncludeUsers: bool, RootUuid: str | None) -> OrganizationTreeVO: + """查询组织树。""" + ... + @abstractmethod async def ListRoleUsers(self, CurrentUserId: int, RoleId: int, Page: int, PageSize: int, Area: str | None, UserName: str | None) -> UserListVO: """查询指定角色下的用户列表。"""