fix: 修正角色权限分配异常问题
This commit is contained in:
parent
7d4170a3c3
commit
5c55f4acde
@ -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)
|
||||
|
@ -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))
|
||||
# 利用集合筛选出角色权限中新增的权限
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user