From c3b09dd80092676ea5b1c0116858dd48fb892195 Mon Sep 17 00:00:00 2001 From: Bai Date: Thu, 26 Nov 2020 19:18:06 +0800 Subject: [PATCH] =?UTF-8?q?perf(perms):=20=E4=BC=98=E5=8C=96=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=8E=88=E6=9D=83=E6=A0=91=E8=BF=94=E5=9B=9Eorg=5Fnam?= =?UTF-8?q?e=E5=AD=97=E6=AE=B5=EF=BC=9B=E6=B7=BB=E5=8A=A0thread=5Flocal?= =?UTF-8?q?=E5=B1=9E=E6=80=A7org=5Fmapper=E5=87=8F=E5=B0=91=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=AC=A1=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/api/mixin.py | 1 + apps/orgs/mixins/models.py | 4 ++-- apps/orgs/utils.py | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/apps/assets/api/mixin.py b/apps/assets/api/mixin.py index 4374f399a..54eb91b41 100644 --- a/apps/assets/api/mixin.py +++ b/apps/assets/api/mixin.py @@ -69,6 +69,7 @@ class SerializeToTreeNodeMixin: 'ip': asset.ip, 'protocols': asset.protocols_as_list, 'platform': asset.platform_base, + 'org_name': asset.org_name }, } } diff --git a/apps/orgs/mixins/models.py b/apps/orgs/mixins/models.py index c6c18902d..af3a8a30f 100644 --- a/apps/orgs/mixins/models.py +++ b/apps/orgs/mixins/models.py @@ -8,7 +8,7 @@ from django.core.exceptions import ValidationError from common.utils import get_logger from ..utils import ( set_current_org, get_current_org, current_org, - filter_org_queryset + filter_org_queryset, get_org_name_by_id ) from ..models import Organization @@ -76,7 +76,7 @@ class OrgModelMixin(models.Model): @property def org_name(self): - return self.org.name + return get_org_name_by_id(self.org_id) @property def fullname(self, attr=None): diff --git a/apps/orgs/utils.py b/apps/orgs/utils.py index 7a4576e23..d86e707c5 100644 --- a/apps/orgs/utils.py +++ b/apps/orgs/utils.py @@ -65,6 +65,38 @@ def get_current_org_id(): return org_id +def construct_org_mapper(): + orgs = Organization.objects.all() + org_mapper = {str(org.id): org for org in orgs} + default_org = Organization.default() + org_mapper.update({ + '': default_org, + Organization.DEFAULT_ID: default_org + }) + return org_mapper + + +def set_org_mapper(org_mapper): + setattr(thread_local, 'org_mapper', org_mapper) + + +def get_org_mapper(): + org_mapper = _find('org_mapper') + if org_mapper is None: + org_mapper = construct_org_mapper() + set_org_mapper(org_mapper) + return org_mapper + + +def get_org_name_by_id(org_id): + org_id = str(org_id) + org_mapper = get_org_mapper() + org = org_mapper.get(org_id) + if not org: + org = Organization.objects.filter(id=org_id).first() + return org.name + + def get_current_org_id_for_serializer(): org_id = get_current_org_id() if org_id == Organization.DEFAULT_ID: