resource_mapping.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. # coding=utf-8
  2. """
  3. @project: MaxKB
  4. @Author:虎虎
  5. @file: resource_mapping.py
  6. @date:2025/12/25 15:28
  7. @desc:
  8. """
  9. from django.utils.translation import gettext_lazy as _
  10. from drf_spectacular.utils import extend_schema
  11. from rest_framework.request import Request
  12. from rest_framework.views import APIView
  13. from common import result
  14. from common.auth import TokenAuth
  15. from common.auth.authentication import has_permissions
  16. from common.constants.permission_constants import Permission, Group, Operate, RoleConstants, ViewPermission, \
  17. CompareConstants
  18. from system_manage.api.resource_mapping import ResourceMappingAPI
  19. from system_manage.serializers.resource_mapping_serializers import ResourceMappingSerializer
  20. class ResourceMappingView(APIView):
  21. authentication_classes = [TokenAuth]
  22. @extend_schema(
  23. methods=['GET'],
  24. description=_('Retrieve the pagination list of resource relationships'),
  25. operation_id=_('Retrieve the pagination list of resource relationships'), # type: ignore
  26. responses=ResourceMappingAPI.get_response(),
  27. parameters=ResourceMappingAPI.get_parameters(),
  28. tags=[_('Resources mapping')] # type: ignore
  29. )
  30. @has_permissions(
  31. lambda r, kwargs: Permission(group=Group(kwargs.get('resource')),
  32. operate=Operate.RELATE_VIEW,
  33. resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}:ROLE/WORKSPACE_MANAGE"),
  34. lambda r, kwargs: Permission(group=Group(kwargs.get('resource')),
  35. operate=Operate.RELATE_VIEW,
  36. resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/{kwargs.get('resource')}/{kwargs.get('resource_id')}"),
  37. ViewPermission([RoleConstants.USER.get_workspace_role()],
  38. [lambda r, kwargs: Permission(group=Group(kwargs.get('resource')),
  39. operate=Operate.SELF,
  40. resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/{kwargs.get('resource')}/{kwargs.get('resource_id')}")],
  41. CompareConstants.AND),
  42. RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
  43. def get(self, request: Request, workspace_id: str, resource: str, resource_id: str, current_page, page_size):
  44. return result.success(ResourceMappingSerializer({
  45. 'resource': resource,
  46. 'resource_id': resource_id,
  47. 'resource_name': request.query_params.get('resource_name'),
  48. 'user_name': request.query_params.get('user_name'),
  49. 'source_type': request.query_params.getlist('source_type[]'),
  50. }).page(current_page, page_size))