fix: Solve the problem that log details cannot be viewed in non-default organizations

pull/15205/head
jiangweidong 2025-04-15 10:18:16 +08:00 committed by Bryan
parent 5390fbacec
commit 9f8256f885
2 changed files with 21 additions and 20 deletions

View File

@ -257,27 +257,26 @@ class OperateLogViewSet(OrgReadonlyModelViewSet):
return super().get_serializer_class() return super().get_serializer_class()
def get_queryset(self): def get_queryset(self):
extra_org_ids = set() current_org_id = str(current_org.id)
if str(current_org.id) == Organization.DEFAULT_ID:
extra_org_ids.update(Organization.INTERNAL_IDS)
if self.is_action_detail: with tmp_to_root_org():
extra_org_ids.add(Organization.SYSTEM_ID) queryset = OperateLog.objects.all()
if current_org_id != Organization.ROOT_ID:
filtered_org_ids = {current_org_id}
if current_org_id == Organization.DEFAULT_ID:
filtered_org_ids.update(Organization.INTERNAL_IDS)
if self.is_action_detail:
filtered_org_ids.update(Organization.SYSTEM_ID)
queryset = OperateLog.objects.filter(org_id__in=filtered_org_ids)
if extra_org_ids: es_config = settings.OPERATE_LOG_ELASTICSEARCH_CONFIG
with tmp_to_root_org(): if es_config:
qs = OperateLog.objects.filter(org_id__in=extra_org_ids) engine_mod = import_module(TYPE_ENGINE_MAPPING['es'])
else: store = engine_mod.OperateLogStore(es_config)
qs = OperateLog.objects.all() if store.ping(timeout=2):
queryset = ESQuerySet(store)
es_config = settings.OPERATE_LOG_ELASTICSEARCH_CONFIG queryset.model = OperateLog
if es_config: return queryset
engine_mod = import_module(TYPE_ENGINE_MAPPING['es'])
store = engine_mod.OperateLogStore(es_config)
if store.ping(timeout=2):
qs = ESQuerySet(store)
qs.model = OperateLog
return qs
class PasswordChangeLogViewSet(OrgReadonlyModelViewSet): class PasswordChangeLogViewSet(OrgReadonlyModelViewSet):

View File

@ -15,6 +15,7 @@ from common.drf.filters import (
IDNotFilterBackend, NotOrRelFilterBackend, LabelFilterBackend IDNotFilterBackend, NotOrRelFilterBackend, LabelFilterBackend
) )
from common.utils import get_logger, lazyproperty from common.utils import get_logger, lazyproperty
from orgs.utils import tmp_to_root_org
from .action import RenderToJsonMixin from .action import RenderToJsonMixin
from .serializer import SerializerMixin from .serializer import SerializerMixin
@ -132,7 +133,8 @@ class QuerySetMixin:
serializer_class = self.get_serializer_class() serializer_class = self.get_serializer_class()
if page and serializer_class: if page and serializer_class:
ids = [str(obj.id) for obj in page] ids = [str(obj.id) for obj in page]
page = model.objects.filter(id__in=ids) with tmp_to_root_org():
page = model.objects.filter(id__in=ids)
page = self.setup_eager_loading(page, is_paginated=True) page = self.setup_eager_loading(page, is_paginated=True)
page_mapper = {str(obj.id): obj for obj in page} page_mapper = {str(obj.id): obj for obj in page}
page = [page_mapper.get(_id) for _id in ids if _id in page_mapper] page = [page_mapper.get(_id) for _id in ids if _id in page_mapper]