perf: 修改 command filter

This commit is contained in:
ibuler 2022-12-02 11:53:07 +08:00
parent 19c3f98e8f
commit a6aafaec05
7 changed files with 35 additions and 31 deletions

View File

@ -1,3 +1,4 @@
from .command_acl import *
from .login_acl import * from .login_acl import *
from .login_asset_acl import * from .login_asset_acl import *
from .login_asset_check import * from .login_asset_check import *

View File

@ -1,12 +1,18 @@
from orgs.mixins.api import OrgBulkModelViewSet from orgs.mixins.api import OrgBulkModelViewSet
from .. import models, serializers from .. import models, serializers
__all__ = ['CommandFilterACLViewSet'] __all__ = ['CommandFilterACLViewSet']
class CommandGroupViewSet(OrgBulkModelViewSet):
model = models.CommandGroup
filterset_fields = ('name',)
search_fields = filterset_fields
serializer_class = serializers.CommandGroupSerializer
class CommandFilterACLViewSet(OrgBulkModelViewSet): class CommandFilterACLViewSet(OrgBulkModelViewSet):
model = models.CommandFilterACL model = models.CommandFilterACL
filterset_fields = ('name', ) filterset_fields = ('name',)
search_fields = filterset_fields search_fields = filterset_fields
serializer_class = serializers.LoginAssetACLSerializer serializer_class = serializers.LoginAssetACLSerializer

View File

@ -1,3 +1,4 @@
from .command_filter import *
from .login_acl import * from .login_acl import *
from .login_asset_acl import * from .login_asset_acl import *
from .login_asset_check import * from .login_asset_check import *

View File

@ -3,14 +3,20 @@ from django.utils.translation import ugettext_lazy as _
from acls.models import CommandGroup, CommandFilterACL from acls.models import CommandGroup, CommandFilterACL
from common.drf.fields import ObjectRelatedField from common.drf.fields import ObjectRelatedField
from orgs.mixins.serializers import BulkOrgResourceModelSerializer 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')) commands = ObjectRelatedField(queryset=CommandGroup.objects, many=True, required=False, label=_('Commands'))
class Meta(BaseUserAssetAccountACLSerializerMixin.Meta): class Meta(BaseSerializer.Meta):
model = CommandFilterACL model = CommandFilterACL
fields = BaseUserAssetAccountACLSerializerMixin.Meta.fields + ['commands'] fields = BaseSerializer.Meta.fields + ['commands']

View File

@ -1,12 +1,12 @@
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from rest_framework import serializers from rest_framework import serializers
from common.drf.serializers import BulkModelSerializer
from common.drf.serializers import MethodSerializer from common.drf.fields import ObjectRelatedField, LabeledChoiceField
from common.drf.fields import ObjectRelatedField from common.drf.serializers import BulkModelSerializer, MethodSerializer
from jumpserver.utils import has_valid_xpack_license from jumpserver.utils import has_valid_xpack_license
from users.models import User from users.models import User
from ..models import LoginACL
from .rules import RuleSerializer from .rules import RuleSerializer
from ..models import LoginACL
__all__ = [ __all__ = [
"LoginACLSerializer", "LoginACLSerializer",
@ -22,9 +22,7 @@ class LoginACLSerializer(BulkModelSerializer):
reviewers = ObjectRelatedField( reviewers = ObjectRelatedField(
queryset=User.objects, label=_("Reviewers"), many=True, required=False queryset=User.objects, label=_("Reviewers"), many=True, required=False
) )
action_display = serializers.ReadOnlyField( action = LabeledChoiceField(choices=LoginACL.ActionChoices.choices)
source="get_action_display", label=_("Action")
)
reviewers_amount = serializers.IntegerField( reviewers_amount = serializers.IntegerField(
read_only=True, source="reviewers.count" read_only=True, source="reviewers.count"
) )
@ -34,17 +32,9 @@ class LoginACLSerializer(BulkModelSerializer):
model = LoginACL model = LoginACL
fields_mini = ["id", "name"] fields_mini = ["id", "name"]
fields_small = fields_mini + [ fields_small = fields_mini + [
"priority", "priority", "user", "rules", "action",
"rules", "is_active", "date_created", "date_updated",
"action", "reviewers_amount", "comment", "created_by",
"action_display",
"is_active",
"user",
"date_created",
"date_updated",
"reviewers_amount",
"comment",
"created_by",
] ]
fields_fk = ["user"] fields_fk = ["user"]
fields_m2m = ["reviewers"] fields_m2m = ["reviewers"]
@ -65,7 +55,7 @@ class LoginACLSerializer(BulkModelSerializer):
return return
choices = action._choices choices = action._choices
if not has_valid_xpack_license(): if not has_valid_xpack_license():
choices.pop(LoginACL.ActionChoices.confirm, None) choices.pop(LoginACL.ActionChoices.review, None)
action._choices = choices action._choices = choices
def get_rules_serializer(self): def get_rules_serializer(self):

View File

@ -1,11 +1,11 @@
from orgs.mixins.serializers import BulkOrgResourceModelSerializer from orgs.mixins.serializers import BulkOrgResourceModelSerializer
from .base import BaseUserAssetAccountACLSerializerMixin from .base import BaseUserAssetAccountACLSerializerMixin as BaseSerializer
from ..models import LoginAssetACL from ..models import LoginAssetACL
__all__ = ["LoginAssetACLSerializer"] __all__ = ["LoginAssetACLSerializer"]
class LoginAssetACLSerializer(BaseUserAssetAccountACLSerializerMixin, BulkOrgResourceModelSerializer): class LoginAssetACLSerializer(BaseSerializer, BulkOrgResourceModelSerializer):
class Meta(BaseUserAssetAccountACLSerializerMixin.Meta): class Meta(BaseSerializer.Meta):
model = LoginAssetACL model = LoginAssetACL

View File

@ -1,14 +1,14 @@
from django.urls import path from django.urls import path
from rest_framework_bulk.routes import BulkRouter from rest_framework_bulk.routes import BulkRouter
from .. import api from .. import api
app_name = 'acls' app_name = 'acls'
router = BulkRouter() router = BulkRouter()
router.register(r'login-acls', api.LoginACLViewSet, 'login-acl') router.register(r'login-acls', api.LoginACLViewSet, 'login-acl')
router.register(r'login-asset-acls', api.LoginAssetACLViewSet, 'login-asset-acl') router.register(r'login-asset-acls', api.LoginAssetACLViewSet, 'login-asset-acl')
router.register(r'command-filter-acls', api.CommandFilterACLViewSet, 'command-filter-acl')
urlpatterns = [ urlpatterns = [
path('login-asset/check/', api.LoginAssetCheckAPI.as_view(), name='login-asset-check'), path('login-asset/check/', api.LoginAssetCheckAPI.as_view(), name='login-asset-check'),