perf: ad as asset

This commit is contained in:
ibuler
2025-04-02 19:12:09 +08:00
committed by 老广
parent 5e25361ee8
commit 3f452daee8
24 changed files with 391 additions and 19 deletions

View File

@@ -7,3 +7,4 @@ from .gpt import *
from .host import *
from .permission import *
from .web import *
from .ad import *

View File

@@ -0,0 +1,16 @@
from assets.models import AD, Asset
from assets.serializers import ADSerializer
from .asset import AssetViewSet
__all__ = ['ADViewSet']
class ADViewSet(AssetViewSet):
model = AD
perm_model = Asset
def get_serializer_classes(self):
serializer_classes = super().get_serializer_classes()
serializer_classes['default'] = ADSerializer
return serializer_classes

View File

@@ -11,6 +11,7 @@ from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework.status import HTTP_200_OK
from accounts.serializers import AccountSerializer
from accounts.tasks import push_accounts_to_assets_task, verify_accounts_connectivity_task
from assets import serializers
from assets.exceptions import NotSupportedTemporarilyError
@@ -109,18 +110,19 @@ class AssetViewSet(SuggestionMixin, OrgBulkModelViewSet):
("platform", serializers.PlatformSerializer),
("suggestion", serializers.MiniAssetSerializer),
("gateways", serializers.GatewaySerializer),
("accounts", AccountSerializer),
)
rbac_perms = (
("match", "assets.match_asset"),
("platform", "assets.view_platform"),
("gateways", "assets.view_gateway"),
("accounts", "assets.view_account"),
("spec_info", "assets.view_asset"),
("gathered_info", "assets.view_asset"),
("sync_platform_protocols", "assets.change_asset"),
)
extra_filter_backends = [
IpInFilterBackend,
NodeFilterBackend, AttrRulesFilterBackend
IpInFilterBackend, NodeFilterBackend, AttrRulesFilterBackend
]
def perform_destroy(self, instance):
@@ -156,6 +158,12 @@ class AssetViewSet(SuggestionMixin, OrgBulkModelViewSet):
gateways = asset.domain.gateways
return self.get_paginated_response_from_queryset(gateways)
@action(methods=["GET"], detail=True, url_path="accounts")
def accounts(self, *args, **kwargs):
asset = super().get_object()
queryset = asset.all_accounts.all()
return self.get_paginated_response_from_queryset(queryset)
@action(methods=['post'], detail=False, url_path='sync-platform-protocols')
def sync_platform_protocols(self, request, *args, **kwargs):
platform_id = request.data.get('platform_id')