perf(perms): 优化用户授权树返回org_name字段;添加thread_local属性org_mapper减少查询次数

pull/5135/head
Bai 2020-11-26 19:18:06 +08:00 committed by Jiangjie.Bai
parent 6d427b9834
commit c3b09dd800
3 changed files with 35 additions and 2 deletions

View File

@ -69,6 +69,7 @@ class SerializeToTreeNodeMixin:
'ip': asset.ip,
'protocols': asset.protocols_as_list,
'platform': asset.platform_base,
'org_name': asset.org_name
},
}
}

View File

@ -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):

View File

@ -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: