diff --git a/apps/assets/models/asset/common.py b/apps/assets/models/asset/common.py index abfc1be8b..16045f3f3 100644 --- a/apps/assets/models/asset/common.py +++ b/apps/assets/models/asset/common.py @@ -94,6 +94,20 @@ class Protocol(models.Model): def __str__(self): return '{}/{}'.format(self.name, self.port) + @lazyproperty + def asset_platform_protocol(self): + protocols = self.asset.platform.protocols.values('name', 'public', 'setting') + protocols = list(filter(lambda p: p['name'] == self.name, protocols)) + return protocols[0] if len(protocols) > 0 else {} + + @property + def setting(self): + return self.asset_platform_protocol.get('setting', {}) + + @property + def public(self): + return self.asset_platform_protocol.get('public', True) + class Asset(NodesRelationMixin, AbsConnectivity, JMSOrgBaseModel): Category = const.Category diff --git a/apps/assets/serializers/asset/common.py b/apps/assets/serializers/asset/common.py index 45fa2ffab..2a50d3419 100644 --- a/apps/assets/serializers/asset/common.py +++ b/apps/assets/serializers/asset/common.py @@ -22,7 +22,7 @@ __all__ = [ 'AssetSerializer', 'AssetSimpleSerializer', 'MiniAssetSerializer', 'AssetTaskSerializer', 'AssetsTaskSerializer', 'AssetProtocolsSerializer', 'AssetDetailSerializer', 'DetailMixin', 'AssetAccountSerializer', - 'AccountSecretSerializer', + 'AccountSecretSerializer', 'AssetProtocolsPermsSerializer' ] uuid_pattern = re.compile(r'[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}') @@ -43,6 +43,11 @@ class AssetProtocolsSerializer(serializers.ModelSerializer): fields = ['name', 'port'] +class AssetProtocolsPermsSerializer(AssetProtocolsSerializer): + class Meta(AssetProtocolsSerializer.Meta): + fields = AssetProtocolsSerializer.Meta.fields + ['public', 'setting'] + + class AssetLabelSerializer(serializers.ModelSerializer): class Meta: model = Label diff --git a/apps/perms/serializers/user_permission.py b/apps/perms/serializers/user_permission.py index c9582cc11..4c175cba5 100644 --- a/apps/perms/serializers/user_permission.py +++ b/apps/perms/serializers/user_permission.py @@ -8,7 +8,7 @@ from rest_framework import serializers from accounts.models import Account from assets.const import Category, AllTypes from assets.models import Node, Asset, Platform -from assets.serializers.asset.common import AssetProtocolsSerializer +from assets.serializers.asset.common import AssetProtocolsPermsSerializer from common.serializers.fields import ObjectRelatedField, LabeledChoiceField from orgs.mixins.serializers import OrgResourceModelSerializerMixin from perms.serializers.permission import ActionChoicesField @@ -22,7 +22,7 @@ __all__ = [ class AssetPermedSerializer(OrgResourceModelSerializerMixin): """ 被授权资产的数据结构 """ platform = ObjectRelatedField(required=False, queryset=Platform.objects, label=_('Platform')) - protocols = AssetProtocolsSerializer(many=True, required=False, label=_('Protocols')) + protocols = AssetProtocolsPermsSerializer(many=True, required=False, label=_('Protocols')) category = LabeledChoiceField(choices=Category.choices, read_only=True, label=_('Category')) type = LabeledChoiceField(choices=AllTypes.choices(), read_only=True, label=_('Type')) domain = ObjectRelatedField(required=False, queryset=Node.objects, label=_('Domain'))