From a6aafaec05189a1354a198acdf4fa1ed07e2163d Mon Sep 17 00:00:00 2001 From: ibuler Date: Fri, 2 Dec 2022 11:53:07 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BF=AE=E6=94=B9=20=20command=20filte?= =?UTF-8?q?r?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/acls/api/__init__.py | 1 + apps/acls/api/command_acl.py | 10 +++++++-- apps/acls/serializers/__init__.py | 1 + apps/acls/serializers/command_filter.py | 16 +++++++++----- apps/acls/serializers/login_acl.py | 28 ++++++++---------------- apps/acls/serializers/login_asset_acl.py | 6 ++--- apps/acls/urls/api_urls.py | 4 ++-- 7 files changed, 35 insertions(+), 31 deletions(-) diff --git a/apps/acls/api/__init__.py b/apps/acls/api/__init__.py index ff52a1ce9..2f720effe 100644 --- a/apps/acls/api/__init__.py +++ b/apps/acls/api/__init__.py @@ -1,3 +1,4 @@ +from .command_acl import * from .login_acl import * from .login_asset_acl import * from .login_asset_check import * diff --git a/apps/acls/api/command_acl.py b/apps/acls/api/command_acl.py index 563e0c1a2..bb9a5482e 100644 --- a/apps/acls/api/command_acl.py +++ b/apps/acls/api/command_acl.py @@ -1,12 +1,18 @@ from orgs.mixins.api import OrgBulkModelViewSet from .. import models, serializers - __all__ = ['CommandFilterACLViewSet'] +class CommandGroupViewSet(OrgBulkModelViewSet): + model = models.CommandGroup + filterset_fields = ('name',) + search_fields = filterset_fields + serializer_class = serializers.CommandGroupSerializer + + class CommandFilterACLViewSet(OrgBulkModelViewSet): model = models.CommandFilterACL - filterset_fields = ('name', ) + filterset_fields = ('name',) search_fields = filterset_fields serializer_class = serializers.LoginAssetACLSerializer diff --git a/apps/acls/serializers/__init__.py b/apps/acls/serializers/__init__.py index ff52a1ce9..465474c4f 100644 --- a/apps/acls/serializers/__init__.py +++ b/apps/acls/serializers/__init__.py @@ -1,3 +1,4 @@ +from .command_filter import * from .login_acl import * from .login_asset_acl import * from .login_asset_check import * diff --git a/apps/acls/serializers/command_filter.py b/apps/acls/serializers/command_filter.py index a6b090c42..934d38198 100644 --- a/apps/acls/serializers/command_filter.py +++ b/apps/acls/serializers/command_filter.py @@ -3,14 +3,20 @@ from django.utils.translation import ugettext_lazy as _ from acls.models import CommandGroup, CommandFilterACL from common.drf.fields import ObjectRelatedField from orgs.mixins.serializers import BulkOrgResourceModelSerializer -from .base import BaseUserAssetAccountACLSerializerMixin +from .base import BaseUserAssetAccountACLSerializerMixin as BaseSerializer -__all__ = ["CommandFilterACLSerializer"] +__all__ = ["CommandFilterACLSerializer", "CommandGroupSerializer"] -class CommandFilterACLSerializer(BaseUserAssetAccountACLSerializerMixin, BulkOrgResourceModelSerializer): +class CommandGroupSerializer(BulkOrgResourceModelSerializer): + class Meta: + model = CommandGroup + fields = ['id', 'name', 'type', 'content', 'comment'] + + +class CommandFilterACLSerializer(BaseSerializer, BulkOrgResourceModelSerializer): commands = ObjectRelatedField(queryset=CommandGroup.objects, many=True, required=False, label=_('Commands')) - class Meta(BaseUserAssetAccountACLSerializerMixin.Meta): + class Meta(BaseSerializer.Meta): model = CommandFilterACL - fields = BaseUserAssetAccountACLSerializerMixin.Meta.fields + ['commands'] + fields = BaseSerializer.Meta.fields + ['commands'] diff --git a/apps/acls/serializers/login_acl.py b/apps/acls/serializers/login_acl.py index f759da435..db89445c8 100644 --- a/apps/acls/serializers/login_acl.py +++ b/apps/acls/serializers/login_acl.py @@ -1,12 +1,12 @@ from django.utils.translation import ugettext as _ from rest_framework import serializers -from common.drf.serializers import BulkModelSerializer -from common.drf.serializers import MethodSerializer -from common.drf.fields import ObjectRelatedField + +from common.drf.fields import ObjectRelatedField, LabeledChoiceField +from common.drf.serializers import BulkModelSerializer, MethodSerializer from jumpserver.utils import has_valid_xpack_license from users.models import User -from ..models import LoginACL from .rules import RuleSerializer +from ..models import LoginACL __all__ = [ "LoginACLSerializer", @@ -22,9 +22,7 @@ class LoginACLSerializer(BulkModelSerializer): reviewers = ObjectRelatedField( queryset=User.objects, label=_("Reviewers"), many=True, required=False ) - action_display = serializers.ReadOnlyField( - source="get_action_display", label=_("Action") - ) + action = LabeledChoiceField(choices=LoginACL.ActionChoices.choices) reviewers_amount = serializers.IntegerField( read_only=True, source="reviewers.count" ) @@ -34,17 +32,9 @@ class LoginACLSerializer(BulkModelSerializer): model = LoginACL fields_mini = ["id", "name"] fields_small = fields_mini + [ - "priority", - "rules", - "action", - "action_display", - "is_active", - "user", - "date_created", - "date_updated", - "reviewers_amount", - "comment", - "created_by", + "priority", "user", "rules", "action", + "is_active", "date_created", "date_updated", + "reviewers_amount", "comment", "created_by", ] fields_fk = ["user"] fields_m2m = ["reviewers"] @@ -65,7 +55,7 @@ class LoginACLSerializer(BulkModelSerializer): return choices = action._choices if not has_valid_xpack_license(): - choices.pop(LoginACL.ActionChoices.confirm, None) + choices.pop(LoginACL.ActionChoices.review, None) action._choices = choices def get_rules_serializer(self): diff --git a/apps/acls/serializers/login_asset_acl.py b/apps/acls/serializers/login_asset_acl.py index b360bb55f..de160d124 100644 --- a/apps/acls/serializers/login_asset_acl.py +++ b/apps/acls/serializers/login_asset_acl.py @@ -1,11 +1,11 @@ from orgs.mixins.serializers import BulkOrgResourceModelSerializer -from .base import BaseUserAssetAccountACLSerializerMixin +from .base import BaseUserAssetAccountACLSerializerMixin as BaseSerializer from ..models import LoginAssetACL __all__ = ["LoginAssetACLSerializer"] -class LoginAssetACLSerializer(BaseUserAssetAccountACLSerializerMixin, BulkOrgResourceModelSerializer): - class Meta(BaseUserAssetAccountACLSerializerMixin.Meta): +class LoginAssetACLSerializer(BaseSerializer, BulkOrgResourceModelSerializer): + class Meta(BaseSerializer.Meta): model = LoginAssetACL diff --git a/apps/acls/urls/api_urls.py b/apps/acls/urls/api_urls.py index c4040ff45..742082022 100644 --- a/apps/acls/urls/api_urls.py +++ b/apps/acls/urls/api_urls.py @@ -1,14 +1,14 @@ from django.urls import path from rest_framework_bulk.routes import BulkRouter + from .. import api - app_name = 'acls' - router = BulkRouter() router.register(r'login-acls', api.LoginACLViewSet, 'login-acl') router.register(r'login-asset-acls', api.LoginAssetACLViewSet, 'login-asset-acl') +router.register(r'command-filter-acls', api.CommandFilterACLViewSet, 'command-filter-acl') urlpatterns = [ path('login-asset/check/', api.LoginAssetCheckAPI.as_view(), name='login-asset-check'),