UnisKB/apps/system_manage/views/menu_setting.py

69 lines
2.7 KiB
Python
Raw Normal View History

2026-03-16 02:33:48 +00:00
# coding=utf-8
"""
@project: MaxKB
@AuthorCodex
@file menu_setting.py
@date2026/3/13
@desc: 菜单管理视图
"""
from drf_spectacular.utils import extend_schema
from rest_framework.request import Request
from rest_framework.views import APIView
from common.auth import TokenAuth
from common.auth.authentication import has_permissions
from common.constants.permission_constants import PermissionConstants, RoleConstants
from common.log.log import log
from common.result import result
from django.utils.translation import gettext_lazy as _
from system_manage.api.menu_setting import MenuSettingAPI, MenuSettingUpdateAPI, CurrentMenuSettingAPI
from system_manage.serializers.menu_setting import MenuSettingSerializer
def get_menu_setting_details(request):
return {
'path': request.path,
'body': request.data,
'query': request.query_params
}
class MenuSettingView(APIView):
authentication_classes = [TokenAuth]
@extend_schema(methods=['GET'],
summary=_('Get menu settings'),
description=_('Get menu settings'),
operation_id=_('Get menu settings'), # type: ignore
responses=MenuSettingAPI.get_response(),
tags=[_('Menu Settings')]) # type: ignore
@has_permissions(PermissionConstants.USER_READ, RoleConstants.ADMIN)
def get(self, request: Request):
return result.success(MenuSettingSerializer.get_config())
@extend_schema(methods=['PUT'],
summary=_('Update menu settings'),
description=_('Update menu settings'),
operation_id=_('Update menu settings'), # type: ignore
request=MenuSettingUpdateAPI.get_request(),
responses=MenuSettingUpdateAPI.get_response(),
tags=[_('Menu Settings')]) # type: ignore
@log(menu='Menu management', operate='Update menu settings', get_details=get_menu_setting_details)
@has_permissions(PermissionConstants.USER_EDIT, RoleConstants.ADMIN)
def put(self, request: Request):
return result.success(MenuSettingSerializer.Update(data=request.data).save())
class CurrentMenuSettingView(APIView):
authentication_classes = [TokenAuth]
@extend_schema(methods=['GET'],
summary=_('Get current user menu settings'),
description=_('Get current user menu settings'),
operation_id=_('Get current user menu settings'), # type: ignore
responses=CurrentMenuSettingAPI.get_response(),
tags=[_('Menu Settings')]) # type: ignore
def get(self, request: Request):
return result.success({'menu_list': MenuSettingSerializer.get_current_menu_list(request.user)})