From 998505e99985f696ce341da3c79e28e20b6ac66f Mon Sep 17 00:00:00 2001 From: ibuler Date: Thu, 8 Jun 2023 18:33:43 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BF=AE=E6=94=B9=20acl=20=E7=99=BB?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/acls/models/base.py | 4 ++-- apps/acls/models/login_acl.py | 4 ---- apps/authentication/mixins.py | 2 +- apps/common/db/fields.py | 6 +++++- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/apps/acls/models/base.py b/apps/acls/models/base.py index 0fe16d7d1..05994e4d2 100644 --- a/apps/acls/models/base.py +++ b/apps/acls/models/base.py @@ -90,7 +90,7 @@ class UserBaseACL(BaseACL): queryset = cls.objects.all() q = cls.users.get_filter_q(user) queryset = queryset.filter(q) - return queryset.valid().distinct() + return queryset.filter(is_active=True).distinct() class UserAssetAccountBaseACL(UserBaseACL, OrgModelMixin): @@ -125,4 +125,4 @@ class UserAssetAccountBaseACL(UserBaseACL, OrgModelMixin): kwargs['org_id'] = org_id if kwargs: queryset = queryset.filter(**kwargs) - return queryset.valid().distinct().order_by('priority', 'date_created') + return queryset.filter(is_active=True).distinct().order_by('priority', 'date_created') diff --git a/apps/acls/models/login_acl.py b/apps/acls/models/login_acl.py index 80f5357ea..ce678e236 100644 --- a/apps/acls/models/login_acl.py +++ b/apps/acls/models/login_acl.py @@ -20,10 +20,6 @@ class LoginACL(UserBaseACL): def is_action(self, action): return self.action == action - @classmethod - def filter_acl(cls, user): - return user.login_acls.all().valid().distinct() - def create_confirm_ticket(self, request): from tickets import const from tickets.models import ApplyLoginTicket diff --git a/apps/authentication/mixins.py b/apps/authentication/mixins.py index c1fb2720d..d3d84f560 100644 --- a/apps/authentication/mixins.py +++ b/apps/authentication/mixins.py @@ -369,7 +369,7 @@ class AuthACLMixin: logger.debug('Login confirm acl id: {}'.format(acl_id)) if not acl_id: return - acl = LoginACL.filter_acl(user).filter(id=acl_id).first() + acl = LoginACL.get_user_acls(user).filter(id=acl_id).first() if not acl: return if not acl.is_action(acl.ActionChoices.review): diff --git a/apps/common/db/fields.py b/apps/common/db/fields.py index bc0795eab..adc3a3b89 100644 --- a/apps/common/db/fields.py +++ b/apps/common/db/fields.py @@ -10,7 +10,7 @@ from django.apps import apps from django.core.exceptions import ValidationError from django.core.validators import MinValueValidator, MaxValueValidator from django.db import models -from django.db.models import Q, Manager +from django.db.models import Q, Manager, QuerySet from django.utils.encoding import force_text from django.utils.translation import ugettext_lazy as _ from rest_framework.utils.encoders import JSONEncoder @@ -486,6 +486,10 @@ class JSONManyToManyDescriptor: elif rule['match'] == 'm2m': if isinstance(value, Manager): value = value.values_list('id', flat=True) + elif isinstance(value, QuerySet): + value = value.values_list('id', flat=True) + elif isinstance(value, models.Model): + value = [value.id] value = set(map(str, value)) rule_value = set(map(str, rule_value)) res &= rule_value.issubset(value)