1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- # -*- coding: utf-8 -*-
- """
- @author: Allen
- @Created on: 2023/10/18
- @Remark: 菜单按钮管理
- """
- from django.db.models import F, CharField, Value, ExpressionWrapper
- from django.db.models.functions import Cast, Concat
- from rest_framework.decorators import action
- from dvadmin.system.models import MenuButton, Menu
- from dvadmin.utils.json_response import DetailResponse
- from dvadmin.utils.serializers import CustomModelSerializer
- from dvadmin.utils.viewset import CustomModelViewSet
- class MenuButtonSerializer(CustomModelSerializer):
- """
- 菜单按钮-序列化器
- """
- class Meta:
- model = MenuButton
- fields = ["id", "name", "value", "api", "method", "menu"]
- read_only_fields = ["id"]
- class MenuButtonInitSerializer(CustomModelSerializer):
- """
- 初始化菜单按钮-序列化器
- """
- class Meta:
- model = MenuButton
- fields = ["id", "name", "value", "api", "method", "menu"]
- read_only_fields = ["id"]
- class MenuButtonCreateUpdateSerializer(CustomModelSerializer):
- """
- 初始化菜单按钮-序列化器
- """
- class Meta:
- model = MenuButton
- fields = "__all__"
- read_only_fields = ["id"]
- class MenuButtonViewSet(CustomModelViewSet):
- """
- 菜单按钮接口
- list:查询
- create:新增
- update:修改
- retrieve:单例
- destroy:删除
- """
- queryset = MenuButton.objects.all()
- serializer_class = MenuButtonSerializer
- create_serializer_class = MenuButtonCreateUpdateSerializer
- update_serializer_class = MenuButtonCreateUpdateSerializer
- extra_filter_backends = []
- @action(methods=["GET"], detail=False, permission_classes=[])
- def get_btn_permission(self, request):
- """
- 获取当前用户的按钮权限
- """
- user = request.user
- if not user.is_superuser:
- menuIds = user.role.values_list("menu__id", flat=True)
- else:
- menuIds = Menu.objects.filter(status=1)
- queryset = (
- MenuButton.objects.filter(menu__in=menuIds)
- .annotate(permission=Concat("menu__web_path", Value(":"), "value", output_field=CharField()))
- .values_list("permission", flat=True)
- )
- return DetailResponse(data=queryset)
|