feat: add tenant-scoped rule and permission management

This commit is contained in:
wren
2026-05-21 22:03:08 +08:00
parent a2c2bf1969
commit 1f1bccf3b3
193 changed files with 64463 additions and 1771 deletions
@@ -8,7 +8,7 @@ from fastapi.responses import JSONResponse
from fastapi_common.fastapi_common_security.security import verify_access_token
from fastapi_common.fastapi_common_web.controller import BaseController
from fastapi_modules.fastapi_leaudit.domian.Dto.rbacAdminDto import RoleAccessSaveDTO, RoleCreateDTO, RolePermissionsBatchDTO, RoleRoutesUpdateDTO, RoleUpdateDTO, UserRolesAssignDTO
from fastapi_modules.fastapi_leaudit.domian.Dto.rbacAdminDto import RoleAccessSaveDTO, RoleCreateDTO, RolePermissionsBatchDTO, RoleRoutesUpdateDTO, RoleUpdateDTO, UserRolesAssignDTO, UserTenantUpdateDTO
from fastapi_modules.fastapi_leaudit.services.impl.rbacAdminServiceImpl import RbacAdminServiceImpl
from fastapi_modules.fastapi_leaudit.services.rbacAdminService import IRbacAdminService
@@ -56,11 +56,12 @@ class RbacAdminController(BaseController):
payload: dict[str, Any] = Depends(verify_access_token),
page: int = Query(1, ge=1),
page_size: int = Query(50, ge=1, le=200),
area: str | None = Query(None),
area: str | None = Query(None, description="兼容租户展示值/旧地区"),
tenant_code: str | None = Query(None, description="租户编码"),
nick_name: str | None = Query(None),
):
"""查询用户列表。"""
data = await self.RbacAdminService.ListUsers(int(payload["user_id"]), page, page_size, area, nick_name)
data = await self.RbacAdminService.ListUsers(int(payload["user_id"]), page, page_size, area, tenant_code, nick_name)
return JSONResponse(status_code=200, content={"code": 200, "message": "success", "data": data.model_dump()})
@self.router.get("/admin/users/organizations/tree")
@@ -79,11 +80,12 @@ class RbacAdminController(BaseController):
payload: dict[str, Any] = Depends(verify_access_token),
page: int = Query(1, ge=1),
page_size: int = Query(50, ge=1, le=200),
area: str | None = Query(None),
area: str | None = Query(None, description="兼容租户展示值/旧地区"),
tenant_code: str | None = Query(None, description="租户编码"),
username: str | None = Query(None),
):
"""查询指定角色下的用户列表。"""
data = await self.RbacAdminService.ListRoleUsers(int(payload["user_id"]), RoleId, page, page_size, area, username)
data = await self.RbacAdminService.ListRoleUsers(int(payload["user_id"]), RoleId, page, page_size, area, tenant_code, username)
return JSONResponse(status_code=200, content={"code": 200, "message": "success", "data": data.model_dump()})
@self.router.post("/v3/rbac/users/{UserId}/roles")
@@ -92,6 +94,12 @@ class RbacAdminController(BaseController):
data = await self.RbacAdminService.AssignUserRoles(int(payload["user_id"]), UserId, Body.role_ids)
return JSONResponse(status_code=200, content={"code": 200, "message": "角色分配成功", "data": data.model_dump()})
@self.router.put("/v3/rbac/users/{UserId}/tenant")
async def UpdateUserTenant(UserId: int, Body: UserTenantUpdateDTO, payload: dict[str, Any] = Depends(verify_access_token)):
"""更新用户租户。"""
data = await self.RbacAdminService.UpdateUserTenant(int(payload["user_id"]), UserId, Body)
return JSONResponse(status_code=200, content={"code": 200, "message": "用户租户更新成功", "data": data.model_dump()})
@self.router.delete("/v3/rbac/users/{UserId}/roles/{RoleId}")
async def RevokeUserRole(UserId: int, RoleId: int, payload: dict[str, Any] = Depends(verify_access_token)):
"""移除用户角色。"""