功能变化: 优化角色授权中的获取授权列表
This commit is contained in:
@@ -1 +1,56 @@
|
|||||||
|
from functools import wraps
|
||||||
|
|
||||||
|
from django.db.models import Func, F, OuterRef, Exists
|
||||||
from django.test import TestCase
|
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()
|
||||||
@@ -171,14 +171,46 @@ class RoleMenuButtonPermissionViewSet(CustomModelViewSet):
|
|||||||
if role is None:
|
if role is None:
|
||||||
return ErrorResponse(msg="未获取到角色信息")
|
return ErrorResponse(msg="未获取到角色信息")
|
||||||
is_superuser = request.user.is_superuser
|
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:
|
if is_superuser:
|
||||||
queryset = Menu.objects.filter(status=1,is_catalog=False).values('name', 'id').all()
|
queryset = Menu.objects.filter(status=1,is_catalog=False).values('name', 'id').all()
|
||||||
else:
|
else:
|
||||||
role_id = request.user.role.values_list('id', flat=True)
|
role_id = request.user.role.values_list('id', flat=True)
|
||||||
menu_list = RoleMenuPermission.objects.filter(role__in=role_id).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()
|
queryset = Menu.objects.filter(status=1, is_catalog=False,id__in=menu_list).values('name', 'id')
|
||||||
serializer = RoleMenuPermissionSerializer(queryset,many=True,request=request)
|
for item in queryset:
|
||||||
data = serializer.data
|
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)
|
return DetailResponse(data=data)
|
||||||
|
|
||||||
@action(methods=['PUT'], detail=True, permission_classes=[IsAuthenticated])
|
@action(methods=['PUT'], detail=True, permission_classes=[IsAuthenticated])
|
||||||
|
|||||||
Reference in New Issue
Block a user