From ce8ad5f9ccb19400747514001c6277749f98030c Mon Sep 17 00:00:00 2001 From: Bai Date: Fri, 3 Feb 2023 15:01:31 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E8=B5=84=E4=BA=A7?= =?UTF-8?q?=E6=8E=88=E6=9D=83=E8=A7=84=E5=88=99=E8=BF=87=E6=BB=A4=E6=94=AF?= =?UTF-8?q?=E6=8C=81=20accounts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/perms/filters.py | 12 +++++++++++- apps/perms/models/asset_permission.py | 2 +- apps/perms/serializers/permission.py | 4 ++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/apps/perms/filters.py b/apps/perms/filters.py index 56382cf2d..df6a4e7d1 100644 --- a/apps/perms/filters.py +++ b/apps/perms/filters.py @@ -5,7 +5,7 @@ from common.drf.filters import BaseFilterSet from common.utils import get_object_or_none, is_uuid from users.models import User, UserGroup from assets.models import Node, Asset -from perms.models import AssetPermission +from perms.models import AssetPermission, AssetPermissionQuerySet class PermissionBaseFilter(BaseFilterSet): @@ -94,6 +94,7 @@ class AssetPermissionFilter(PermissionBaseFilter): node_name = filters.CharFilter(method='do_nothing') asset_id = filters.UUIDFilter(method='do_nothing') asset_name = filters.CharFilter(method='do_nothing') + accounts = filters.CharFilter(method='do_nothing') ip = filters.CharFilter(method='do_nothing') class Meta: @@ -111,9 +112,18 @@ class AssetPermissionFilter(PermissionBaseFilter): qs = self.filter_effective(qs) qs = self.filter_asset(qs) qs = self.filter_node(qs) + qs = self.filter_accounts(qs) qs = qs.distinct() return qs + def filter_accounts(self, queryset: AssetPermissionQuerySet): + accounts = self.get_query_param('accounts') + if not accounts: + return queryset + accounts = accounts.split(',') + queryset = queryset.filter_by_accounts(accounts) + return queryset + def filter_node(self, queryset: QuerySet): is_query_all = self.get_query_param('all', True) node_id = self.get_query_param('node_id') diff --git a/apps/perms/models/asset_permission.py b/apps/perms/models/asset_permission.py index 1f14c86fa..232df9162 100644 --- a/apps/perms/models/asset_permission.py +++ b/apps/perms/models/asset_permission.py @@ -15,7 +15,7 @@ from common.utils.timezone import local_now from perms.const import ActionChoices from accounts.const import AliasAccount -__all__ = ['AssetPermission', 'ActionChoices'] +__all__ = ['AssetPermission', 'ActionChoices', 'AssetPermissionQuerySet'] # 使用场景 logger = logging.getLogger(__name__) diff --git a/apps/perms/serializers/permission.py b/apps/perms/serializers/permission.py index fef9929b8..39d64f8d1 100644 --- a/apps/perms/serializers/permission.py +++ b/apps/perms/serializers/permission.py @@ -72,6 +72,10 @@ class AssetPermissionSerializer(BulkOrgResourceModelSerializer): return actions.default = list(actions.choices.keys()) + @staticmethod + def validate_accounts(accounts): + return list(set(accounts)) + @classmethod def setup_eager_loading(cls, queryset): """Perform necessary eager loading of data."""