diff --git a/backend/dvadmin/system/tests.py b/backend/dvadmin/system/tests.py index 2e9cb5f..866d09d 100644 --- a/backend/dvadmin/system/tests.py +++ b/backend/dvadmin/system/tests.py @@ -1 +1,56 @@ +from functools import wraps + +from django.db.models import Func, F, OuterRef, Exists from django.test import TestCase +import django +import os +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "application.settings") +django.setup() +from dvadmin.system.models import Menu, RoleMenuPermission, RoleMenuButtonPermission, MenuButton + + +import time + +def timing_decorator(func): + @wraps(func) + def wrapper(*args, **kwargs): + start_time = time.time() + result = func(*args, **kwargs) + end_time = time.time() + run_time = end_time - start_time + print(f"{func.__name__} ran in {run_time:.6f} seconds") + return result + return wrapper + +@timing_decorator +def getMenu(): + data = [] + queryset = Menu.objects.filter(status=1, is_catalog=False).values('name', 'id') + for item in queryset: + parent_list = Menu.get_all_parent(item['id']) + names = [d["name"] for d in parent_list] + completeName = "/".join(names) + isCheck = RoleMenuPermission.objects.filter( + menu__id=item['id'], + role__id=1, + ).exists() + mbCheck = RoleMenuButtonPermission.objects.filter( + menu_button = OuterRef("pk"), + role__id=1, + ) + btns = MenuButton.objects.filter( + menu__id=item['id'], + ).annotate(isCheck=Exists(mbCheck)).values('id', 'name', 'value', 'isCheck',data_range=F('menu_button_permission__data_range')) + # print(b) + dicts = { + 'name': completeName, + 'id': item['id'], + 'isCheck': isCheck, + 'btns':btns + } + print(dicts) + data.append(dicts) + # print(data) + +if __name__ == '__main__': + getMenu() \ No newline at end of file diff --git a/backend/dvadmin/system/views/role_menu_button_permission.py b/backend/dvadmin/system/views/role_menu_button_permission.py index 6f77931..745daee 100644 --- a/backend/dvadmin/system/views/role_menu_button_permission.py +++ b/backend/dvadmin/system/views/role_menu_button_permission.py @@ -171,14 +171,46 @@ class RoleMenuButtonPermissionViewSet(CustomModelViewSet): if role is None: return ErrorResponse(msg="未获取到角色信息") is_superuser = request.user.is_superuser + # if is_superuser: + # queryset = Menu.objects.filter(status=1,is_catalog=False).values('name', 'id').all() + # else: + # role_id = request.user.role.values_list('id', flat=True) + # menu_list = RoleMenuPermission.objects.filter(role__in=role_id).values_list('id',flat=True) + # queryset = Menu.objects.filter(status=1, is_catalog=False,id__in=menu_list).values('name', 'id').all() + # serializer = RoleMenuPermissionSerializer(queryset,many=True,request=request) + # data = serializer.data + # return DetailResponse(data=data) + data = [] if is_superuser: queryset = Menu.objects.filter(status=1,is_catalog=False).values('name', 'id').all() else: role_id = request.user.role.values_list('id', flat=True) menu_list = RoleMenuPermission.objects.filter(role__in=role_id).values_list('id',flat=True) - queryset = Menu.objects.filter(status=1, is_catalog=False,id__in=menu_list).values('name', 'id').all() - serializer = RoleMenuPermissionSerializer(queryset,many=True,request=request) - data = serializer.data + queryset = Menu.objects.filter(status=1, is_catalog=False,id__in=menu_list).values('name', 'id') + for item in queryset: + parent_list = Menu.get_all_parent(item['id']) + names = [d["name"] for d in parent_list] + completeName = "/".join(names) + isCheck = RoleMenuPermission.objects.filter( + menu__id=item['id'], + role__id=role, + ).exists() + mbCheck = RoleMenuButtonPermission.objects.filter( + menu_button=OuterRef("pk"), + role__id=role, + ) + btns = MenuButton.objects.filter( + menu__id=item['id'], + ).annotate(isCheck=Exists(mbCheck)).values('id', 'name', 'value', 'isCheck', + data_range=F('menu_button_permission__data_range')) + dicts = { + 'name': completeName, + 'id': item['id'], + 'isCheck': isCheck, + 'btns': btns, + + } + data.append(dicts) return DetailResponse(data=data) @action(methods=['PUT'], detail=True, permission_classes=[IsAuthenticated])