diff --git a/api/permission.py b/api/permission.py index 0938f82..a9840d1 100644 --- a/api/permission.py +++ b/api/permission.py @@ -14,7 +14,7 @@ from annotation.auth import Auth, hasAdmin from annotation.log import Log from config.constant import BusinessType, RedisKeyConfig from controller.login import LoginController -from models import Permission +from models import Permission, RolePermission from schemas.common import BaseResponse from schemas.permission import AddPermissionParams, GetPermissionInfoResponse, GetPermissionListResponse from utils.response import Response @@ -73,8 +73,8 @@ async def add_permission(request: Request, params: AddPermissionParams): @Auth(permission_list=["permission:btn:delete"]) async def delete_permission(request: Request, id: str = Path(description="权限ID")): if permission := await Permission.get_or_none(id=id, del_flag=1): - permission.del_flag = 0 - await permission.save() + # 移除角色权限 + await delete_permission_recursive(permission_id=permission.id) # 更新用户信息缓存 userInfos = await request.app.state.redis.keys(f'{RedisKeyConfig.USER_INFO.key}*') if userInfos: @@ -88,6 +88,20 @@ async def delete_permission(request: Request, id: str = Path(description="权限 return Response.error(msg="删除权限失败,权限不存在!") +async def delete_permission_recursive(permission_id: str): + """ + 递归删除权限及其附属权限 + :param permission_id: 权限ID + :return: + """ + await Permission.filter(id=permission_id, del_flag=1).update(del_flag=0) + await RolePermission.filter(permission_id=permission_id, del_flag=1).update(del_flag=0) + sub_permissions = await Permission.filter(parent_id=permission_id, del_flag=1).all() + for sub_department in sub_permissions: + await delete_permission_recursive(sub_department.id) + return True + + @permissionAPI.put("/update/{id}", response_model=BaseResponse, response_class=JSONResponse, summary="更新权限") @permissionAPI.post("/update/{id}", response_model=BaseResponse, response_class=JSONResponse, summary="更新权限") @Log(title="更新权限", business_type=BusinessType.UPDATE) diff --git a/api/role.py b/api/role.py index cfeeb43..b05053c 100644 --- a/api/role.py +++ b/api/role.py @@ -305,11 +305,11 @@ async def update_role_permission(request: Request, params: AddRolePermissionPara department_permissions = await Permission.filter(del_flag=1).values("id") else: department_permissions = await Permission.filter(is_admin=False, del_flag=1).values("id") - department_permissions = filterKeyValues(department_permissions, "id") + department_permissions = await filterKeyValues(department_permissions, key="id", convert_type=str) if role := await Role.get_or_none(id=id, del_flag=1, department__id__in=sub_departments): # 已有角色权限 rolePermissions = await RolePermission.filter(role_id=role.id, del_flag=1).values("permission_id") - rolePermissions = await filterKeyValues(rolePermissions, "permission_id") + rolePermissions = await filterKeyValues(rolePermissions, key="permission_id", convert_type=str) # 利用集合筛选出角色权限中不存在的权限 delete_list = set(rolePermissions).difference(set(params.permission_ids)) # 利用集合筛选出角色权限中新增的权限 diff --git a/controller/query.py b/controller/query.py index ece4217..0f57e57 100644 --- a/controller/query.py +++ b/controller/query.py @@ -132,7 +132,8 @@ class QueryController: keepAlive="permission__keep_alive", hiddenTag="permission__hidden_tag", showLink="permission__show_link", - showParent="permission__show_parent" + showParent="permission__show_parent", + isAdmin="permission__is_admin", ) permissions.extend(permission) return permissions