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