mirror of
https://github.com/jumpserver/jumpserver.git
synced 2025-09-07 18:31:04 +00:00
[Update] 优化sql, or方式改为union (#3682)
* [Update] 优化sql, or方式改为union * [Update] 优化union操作,直接union后,queryset 的一些参数不能使用,如annoate, 如filter assets__isnull=True
This commit is contained in:
@@ -1,11 +1,9 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
|
||||
from django.db.models import Q
|
||||
|
||||
from common.permissions import IsOrgAdmin
|
||||
from orgs.mixins.api import OrgModelViewSet
|
||||
from common.utils import get_object_or_none
|
||||
from common.utils import get_object_or_none, union_queryset
|
||||
from ..models import AssetPermission
|
||||
from ..hands import (
|
||||
User, UserGroup, Asset, Node, SystemUser,
|
||||
@@ -111,9 +109,9 @@ class AssetPermissionViewSet(OrgModelViewSet):
|
||||
continue
|
||||
ancestor_keys = Node.get_node_ancestor_keys(key, with_self=True)
|
||||
inherit_all_nodes.update(ancestor_keys)
|
||||
queryset = queryset.filter(
|
||||
Q(assets__in=assets) | Q(nodes__key__in=inherit_all_nodes)
|
||||
).distinct()
|
||||
assets_queryset = queryset.filter(assets__in=assets)
|
||||
nodes_queryset = queryset.filter(nodes__key__in=inherit_all_nodes)
|
||||
queryset = union_queryset(assets_queryset, nodes_queryset)
|
||||
return queryset
|
||||
|
||||
def filter_user(self, queryset):
|
||||
@@ -131,9 +129,9 @@ class AssetPermissionViewSet(OrgModelViewSet):
|
||||
queryset = queryset.filter(users=user)
|
||||
return queryset
|
||||
groups = user.groups.all()
|
||||
queryset = queryset.filter(
|
||||
Q(users=user) | Q(user_groups__in=groups)
|
||||
).distinct()
|
||||
users_queryset = queryset.filter(users=user)
|
||||
groups_queryset = queryset.filter(user_groups__in=groups)
|
||||
queryset = union_queryset(users_queryset, groups_queryset)
|
||||
return queryset
|
||||
|
||||
def filter_user_group(self, queryset):
|
||||
|
Reference in New Issue
Block a user