From 2dea891b1524ce91add4786b8756cf1be733090a Mon Sep 17 00:00:00 2001 From: Bai Date: Wed, 30 Nov 2022 17:11:36 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E5=A4=84=E7=90=86=20acl=20=E5=90=8E?= =?UTF-8?q?=E5=8F=B0=20check=20=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/acls/api/login_asset_check.py | 46 +++++++++++----------- apps/acls/serializers/login_asset_check.py | 30 ++++---------- 2 files changed, 31 insertions(+), 45 deletions(-) diff --git a/apps/acls/api/login_asset_check.py b/apps/acls/api/login_asset_check.py index 331c42768..662befafd 100644 --- a/apps/acls/api/login_asset_check.py +++ b/apps/acls/api/login_asset_check.py @@ -20,34 +20,41 @@ class LoginAssetCheckAPI(CreateAPIView): return LoginAssetACL.objects.all() def create(self, request, *args, **kwargs): - is_need_confirm, response_data = self.check_if_need_confirm() - return Response(data=response_data, status=200) + data = self.check_confirm() + return Response(data=data, status=200) - def check_if_need_confirm(self): + @lazyproperty + def serializer(self): + serializer = self.get_serializer(data=self.request.data) + serializer.is_valid(raise_exception=True) + return serializer + + def check_confirm(self): queries = { - 'user': self.serializer.user, 'asset': self.serializer.asset, - 'account_username': self.serializer.username, + 'user': self.serializer.user, + 'asset': self.serializer.asset, + 'account_username': self.serializer.account_username, 'action': LoginAssetACL.ActionChoices.login_confirm } - with tmp_to_org(self.serializer.org): + with tmp_to_org(self.serializer.asset.org): acl = LoginAssetACL.filter(**queries).valid().first() - if not acl: - is_need_confirm = False - response_data = {} - else: - is_need_confirm = True + if acl: + need_confirm = True response_data = self._get_response_data_of_need_confirm(acl) - response_data['need_confirm'] = is_need_confirm - return is_need_confirm, response_data + else: + need_confirm = False + response_data = {} + response_data['need_confirm'] = need_confirm + return response_data - def _get_response_data_of_need_confirm(self, acl): + def _get_response_data_of_need_confirm(self, acl) -> dict: ticket = LoginAssetACL.create_login_asset_confirm_ticket( user=self.serializer.user, asset=self.serializer.asset, - account_username=self.serializer.username, + account_username=self.serializer.account_username, assignees=acl.reviewers.all(), - org_id=self.serializer.org.id, + org_id=self.serializer.asset.org.id, ) confirm_status_url = reverse( view_name='api-tickets:super-ticket-status', @@ -68,10 +75,3 @@ class LoginAssetCheckAPI(CreateAPIView): 'ticket_id': str(ticket.id) } return data - - @lazyproperty - def serializer(self): - serializer = self.get_serializer(data=self.request.data) - serializer.is_valid(raise_exception=True) - return serializer - diff --git a/apps/acls/serializers/login_asset_check.py b/apps/acls/serializers/login_asset_check.py index 49afda63a..eac7481d5 100644 --- a/apps/acls/serializers/login_asset_check.py +++ b/apps/acls/serializers/login_asset_check.py @@ -16,34 +16,20 @@ class LoginAssetCheckSerializer(serializers.Serializer): super().__init__(*args, **kwargs) self.user = None self.asset = None - self.username = None def validate_user_id(self, user_id): - self.user = self.validate_object_exist(User, user_id) + self.user = self.get_object(User, user_id) return user_id def validate_asset_id(self, asset_id): - self.asset = self.validate_object_exist(Asset, asset_id) + self.asset = self.get_object(Asset, asset_id) return asset_id @staticmethod - def validate_object_exist(model, field_id): + def get_object(model, pk): with tmp_to_root_org(): - obj = get_object_or_none(model, pk=field_id) - if not obj: - error = '{} Model object does not exist'.format(model.__name__) - raise serializers.ValidationError(error) - return obj - - def validate_account_username(self, account_username): - asset_id = self.initial_data.get('asset_id') - account = Account.objects.filter(username=account_username, asset_id=asset_id).first() - if not account: - error = 'Account username does not exist' - raise serializers.ValidationError(error) - self.username = account_username - return account_username - - @lazyproperty - def org(self): - return self.asset.org + obj = get_object_or_none(model, pk=pk) + if obj: + return obj + error = '{} Model object does not exist'.format(model.__name__) + raise serializers.ValidationError(error)