mirror of https://github.com/jumpserver/jumpserver
[Update] 修改获取资产的逻辑
parent
28afd1f6f9
commit
5055a9f352
|
@ -302,13 +302,19 @@ class NodeAssetsMixin:
|
||||||
return Asset.objects.filter(nodes__key__regex=pattern).distinct()
|
return Asset.objects.filter(nodes__key__regex=pattern).distinct()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_nodes_all_assets(cls, nodes_keys, extra_assets_ids=None):
|
def get_nodes_all_assets_ids(cls, nodes_keys):
|
||||||
from .asset import Asset
|
|
||||||
nodes_keys = cls.clean_children_keys(nodes_keys)
|
nodes_keys = cls.clean_children_keys(nodes_keys)
|
||||||
assets_ids = set()
|
assets_ids = set()
|
||||||
for key in nodes_keys:
|
for key in nodes_keys:
|
||||||
node_assets_ids = cls.tree().all_assets(key)
|
node_assets_ids = cls.tree().all_assets(key)
|
||||||
assets_ids.update(set(node_assets_ids))
|
assets_ids.update(set(node_assets_ids))
|
||||||
|
return assets_ids
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_nodes_all_assets(cls, nodes_keys, extra_assets_ids=None):
|
||||||
|
from .asset import Asset
|
||||||
|
nodes_keys = cls.clean_children_keys(nodes_keys)
|
||||||
|
assets_ids = cls.get_nodes_all_assets_ids(nodes_keys)
|
||||||
if extra_assets_ids:
|
if extra_assets_ids:
|
||||||
assets_ids.update(set(extra_assets_ids))
|
assets_ids.update(set(extra_assets_ids))
|
||||||
return Asset.objects.filter(id__in=assets_ids)
|
return Asset.objects.filter(id__in=assets_ids)
|
||||||
|
|
|
@ -148,18 +148,12 @@ class SystemUser(AssetUser):
|
||||||
return True, None
|
return True, None
|
||||||
|
|
||||||
def get_all_assets(self):
|
def get_all_assets(self):
|
||||||
from .node import Node
|
from assets.models import Node
|
||||||
args = [Q(systemuser=self)]
|
|
||||||
pattern = set()
|
|
||||||
nodes_keys = self.nodes.all().values_list('key', flat=True)
|
nodes_keys = self.nodes.all().values_list('key', flat=True)
|
||||||
nodes_keys = Node.clean_children_keys(nodes_keys)
|
assets_ids = set(self.assets.all().values_list('id', flat=True))
|
||||||
for key in nodes_keys:
|
nodes_assets_ids = Node.get_nodes_all_assets_ids(nodes_keys)
|
||||||
pattern.add(r'^{0}$|^{0}:'.format(key))
|
assets_ids.update(nodes_assets_ids)
|
||||||
pattern = '|'.join(list(pattern))
|
assets = Asset.objects.filter(id__in=assets_ids)
|
||||||
if pattern:
|
|
||||||
args.append(Q(nodes__key__regex=pattern))
|
|
||||||
args = reduce(lambda x, y: x | y, args)
|
|
||||||
assets = Asset.objects.filter(args).distinct()
|
|
||||||
return assets
|
return assets
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
|
@ -94,15 +94,10 @@ class AssetPermission(BasePermission):
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_all_assets(self):
|
def get_all_assets(self):
|
||||||
args = [Q(granted_by_permissions=self)]
|
from assets.models import Node
|
||||||
pattern = set()
|
|
||||||
nodes_keys = self.nodes.all().values_list('key', flat=True)
|
nodes_keys = self.nodes.all().values_list('key', flat=True)
|
||||||
nodes_keys = Node.clean_children_keys(nodes_keys)
|
assets_ids = set(self.assets.all().values_list('id', flat=True))
|
||||||
for key in nodes_keys:
|
nodes_assets_ids = Node.get_nodes_all_assets_ids(nodes_keys)
|
||||||
pattern.add(r'^{0}$|^{0}:'.format(key))
|
assets_ids.update(nodes_assets_ids)
|
||||||
pattern = '|'.join(list(pattern))
|
assets = Asset.objects.filter(id__in=assets_ids)
|
||||||
if pattern:
|
|
||||||
args.append(Q(nodes__key__regex=pattern))
|
|
||||||
args = reduce(lambda x, y: x | y, args)
|
|
||||||
assets = Asset.objects.filter(args).distinct()
|
|
||||||
return assets
|
return assets
|
||||||
|
|
Loading…
Reference in New Issue