from jumpserver.utils import has_valid_xpack_license from common.api import JMSModelViewSet from common.serializers import GroupedChoiceSerializer from assets.models import Platform from assets.const import AllTypes from assets.serializers import PlatformSerializer __all__ = ['AssetPlatformViewSet'] class AssetPlatformViewSet(JMSModelViewSet): queryset = Platform.objects.all() serializer_classes = { 'default': PlatformSerializer, 'categories': GroupedChoiceSerializer } filterset_fields = ['name', 'category', 'type'] search_fields = ['name'] rbac_perms = { 'categories': 'assets.view_platform', 'type_constraints': 'assets.view_platform', 'ops_methods': 'assets.view_platform' } def get_queryset(self): queryset = super().get_queryset() queryset = queryset.filter(type__in=AllTypes.get_types()) return queryset def get_object(self): pk = self.kwargs.get('pk', '') if pk.isnumeric(): return super().get_object() return self.get_queryset().get(name=pk) def check_object_permissions(self, request, obj): if request.method.lower() in ['delete', 'put', 'patch'] and obj.internal: self.permission_denied( request, message={"detail": "Internal platform"} ) return super().check_object_permissions(request, obj)