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 annotation.log import Log
|
||||||
from config.constant import BusinessType, RedisKeyConfig
|
from config.constant import BusinessType, RedisKeyConfig
|
||||||
from controller.login import LoginController
|
from controller.login import LoginController
|
||||||
from models import Permission
|
from models import Permission, RolePermission
|
||||||
from schemas.common import BaseResponse
|
from schemas.common import BaseResponse
|
||||||
from schemas.permission import AddPermissionParams, GetPermissionInfoResponse, GetPermissionListResponse
|
from schemas.permission import AddPermissionParams, GetPermissionInfoResponse, GetPermissionListResponse
|
||||||
from utils.response import Response
|
from utils.response import Response
|
||||||
@ -73,8 +73,8 @@ async def add_permission(request: Request, params: AddPermissionParams):
|
|||||||
@Auth(permission_list=["permission:btn:delete"])
|
@Auth(permission_list=["permission:btn:delete"])
|
||||||
async def delete_permission(request: Request, id: str = Path(description="权限ID")):
|
async def delete_permission(request: Request, id: str = Path(description="权限ID")):
|
||||||
if permission := await Permission.get_or_none(id=id, del_flag=1):
|
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}*')
|
userInfos = await request.app.state.redis.keys(f'{RedisKeyConfig.USER_INFO.key}*')
|
||||||
if userInfos:
|
if userInfos:
|
||||||
@ -88,6 +88,20 @@ async def delete_permission(request: Request, id: str = Path(description="权限
|
|||||||
return Response.error(msg="删除权限失败,权限不存在!")
|
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.put("/update/{id}", response_model=BaseResponse, response_class=JSONResponse, summary="更新权限")
|
||||||
@permissionAPI.post("/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)
|
@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")
|
department_permissions = await Permission.filter(del_flag=1).values("id")
|
||||||
else:
|
else:
|
||||||
department_permissions = await Permission.filter(is_admin=False, del_flag=1).values("id")
|
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):
|
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 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))
|
delete_list = set(rolePermissions).difference(set(params.permission_ids))
|
||||||
# 利用集合筛选出角色权限中新增的权限
|
# 利用集合筛选出角色权限中新增的权限
|
||||||
|
@ -132,7 +132,8 @@ class QueryController:
|
|||||||
keepAlive="permission__keep_alive",
|
keepAlive="permission__keep_alive",
|
||||||
hiddenTag="permission__hidden_tag",
|
hiddenTag="permission__hidden_tag",
|
||||||
showLink="permission__show_link",
|
showLink="permission__show_link",
|
||||||
showParent="permission__show_parent"
|
showParent="permission__show_parent",
|
||||||
|
isAdmin="permission__is_admin",
|
||||||
)
|
)
|
||||||
permissions.extend(permission)
|
permissions.extend(permission)
|
||||||
return permissions
|
return permissions
|
||||||
|
Loading…
x
Reference in New Issue
Block a user