mirror of https://github.com/jumpserver/jumpserver
fix: 修改 ConnectionToken Serializer 命令过滤器
parent
21f91358cf
commit
c8c5aca355
|
@ -124,11 +124,9 @@ class CommandFilterACL(OrgModelMixin, BaseACL):
|
||||||
return ticket
|
return ticket
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_queryset(
|
def get_command_groups(cls, user_id=None, user_group_id=None, account=None, asset_id=None, org_id=None):
|
||||||
cls, user_id=None, user_group_id=None, account=None,
|
|
||||||
asset_id=None, org_id=None
|
from assets.models import Account, Asset
|
||||||
):
|
|
||||||
from assets.models import Account
|
|
||||||
user_groups = []
|
user_groups = []
|
||||||
user = get_object_or_none(User, pk=user_id)
|
user = get_object_or_none(User, pk=user_id)
|
||||||
if user:
|
if user:
|
||||||
|
@ -152,11 +150,14 @@ class CommandFilterACL(OrgModelMixin, BaseACL):
|
||||||
org_id = asset.org_id
|
org_id = asset.org_id
|
||||||
q |= Q(assets=asset)
|
q |= Q(assets=asset)
|
||||||
if q:
|
if q:
|
||||||
cmd_filters = CommandFilter.objects.filter(q).filter(is_active=True)
|
cmd_filters = cls.objects.filter(q).filter(is_active=True)
|
||||||
if org_id:
|
if org_id:
|
||||||
cmd_filters = cmd_filters.filter(org_id=org_id)
|
cmd_filters = cmd_filters.filter(org_id=org_id)
|
||||||
rule_ids = cmd_filters.values_list('rules', flat=True)
|
filter_ids = cmd_filters.values_list('id', flat=True)
|
||||||
rules = cls.objects.filter(id__in=rule_ids)
|
command_group_ids = cls.commands.through.objects\
|
||||||
|
.filter(commandfilteracl_id__in=filter_ids)\
|
||||||
|
.values_list('commandgroup_id', flat=True)
|
||||||
|
cmd_groups = CommandGroup.objects.filter(id__in=command_group_ids)
|
||||||
else:
|
else:
|
||||||
rules = cls.objects.none()
|
cmd_groups = CommandGroup.objects.none()
|
||||||
return rules
|
return cmd_groups
|
||||||
|
|
|
@ -156,16 +156,16 @@ class ConnectionToken(OrgModelMixin, JMSBaseModel):
|
||||||
return self.domain.random_gateway()
|
return self.domain.random_gateway()
|
||||||
|
|
||||||
@lazyproperty
|
@lazyproperty
|
||||||
def cmd_filter_rules(self):
|
def acl_command_groups(self):
|
||||||
from assets.models import CommandFilterRule
|
from acls.models import CommandFilterACL
|
||||||
kwargs = {
|
kwargs = {
|
||||||
'user_id': self.user.id,
|
'user_id': self.user.id,
|
||||||
'account': self.account,
|
'account': self.account,
|
||||||
}
|
}
|
||||||
if self.asset:
|
if self.asset:
|
||||||
kwargs['asset_id'] = self.asset.id
|
kwargs['asset_id'] = self.asset.id
|
||||||
rules = CommandFilterRule.get_queryset(**kwargs)
|
cmd_groups = CommandFilterACL.get_command_groups(**kwargs)
|
||||||
return rules
|
return cmd_groups
|
||||||
|
|
||||||
|
|
||||||
class SuperConnectionToken(ConnectionToken):
|
class SuperConnectionToken(ConnectionToken):
|
||||||
|
|
|
@ -2,6 +2,7 @@ from django.utils.translation import ugettext_lazy as _
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from assets.models import Asset, CommandFilterRule, Account, Platform
|
from assets.models import Asset, CommandFilterRule, Account, Platform
|
||||||
|
from acls.models import CommandGroup
|
||||||
from assets.serializers import PlatformSerializer, AssetProtocolsSerializer
|
from assets.serializers import PlatformSerializer, AssetProtocolsSerializer
|
||||||
from authentication.models import ConnectionToken
|
from authentication.models import ConnectionToken
|
||||||
from orgs.mixins.serializers import OrgResourceModelSerializerMixin
|
from orgs.mixins.serializers import OrgResourceModelSerializerMixin
|
||||||
|
@ -89,8 +90,9 @@ class ConnectionTokenAssetSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Asset
|
model = Asset
|
||||||
fields = ['id', 'name', 'address', 'protocols',
|
fields = [
|
||||||
'org_id', 'specific']
|
'id', 'name', 'address', 'protocols', 'category', 'type', 'org_id', 'specific'
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
class SimpleAccountSerializer(serializers.ModelSerializer):
|
class SimpleAccountSerializer(serializers.ModelSerializer):
|
||||||
|
@ -123,14 +125,14 @@ class ConnectionTokenGatewaySerializer(serializers.ModelSerializer):
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class ConnectionTokenCmdFilterRuleSerializer(serializers.ModelSerializer):
|
class ConnectionTokenACLCmdGroupSerializer(serializers.ModelSerializer):
|
||||||
""" Command filter rule """
|
""" ACL command group"""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = CommandFilterRule
|
model = CommandGroup
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'type', 'content', 'ignore_case', 'pattern',
|
'id', 'type', 'content', 'ignore_case', 'pattern',
|
||||||
'priority', 'action', 'date_created',
|
'action', 'date_created',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -145,23 +147,23 @@ class ConnectionTokenPlatform(PlatformSerializer):
|
||||||
|
|
||||||
|
|
||||||
class ConnectionTokenSecretSerializer(OrgResourceModelSerializerMixin):
|
class ConnectionTokenSecretSerializer(OrgResourceModelSerializerMixin):
|
||||||
expire_now = serializers.BooleanField(label=_('Expired now'), default=True)
|
|
||||||
user = ConnectionTokenUserSerializer(read_only=True)
|
user = ConnectionTokenUserSerializer(read_only=True)
|
||||||
asset = ConnectionTokenAssetSerializer(read_only=True)
|
asset = ConnectionTokenAssetSerializer(read_only=True)
|
||||||
account = ConnectionTokenAccountSerializer(read_only=True)
|
account = ConnectionTokenAccountSerializer(read_only=True)
|
||||||
gateway = ConnectionTokenGatewaySerializer(read_only=True)
|
gateway = ConnectionTokenGatewaySerializer(read_only=True)
|
||||||
platform = ConnectionTokenPlatform(read_only=True)
|
platform = ConnectionTokenPlatform(read_only=True)
|
||||||
# cmd_filter_rules = ConnectionTokenCmdFilterRuleSerializer(many=True)
|
acl_command_groups = ConnectionTokenACLCmdGroupSerializer(read_only=True, many=True)
|
||||||
actions = ActionChoicesField()
|
actions = ActionChoicesField()
|
||||||
expire_at = serializers.IntegerField()
|
expire_at = serializers.IntegerField()
|
||||||
|
expire_now = serializers.BooleanField(label=_('Expired now'), write_only=True, default=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = ConnectionToken
|
model = ConnectionToken
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'value', 'user', 'asset', 'account', 'platform',
|
'id', 'value', 'user', 'asset', 'account', 'platform',
|
||||||
|
'acl_command_groups',
|
||||||
'protocol', 'gateway', 'actions', 'expire_at', 'expire_now',
|
'protocol', 'gateway', 'actions', 'expire_at', 'expire_now',
|
||||||
]
|
]
|
||||||
extra_kwargs = {
|
extra_kwargs = {
|
||||||
'value': {'read_only': True},
|
'value': {'read_only': True},
|
||||||
'expire_now': {'write_only': True},
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue