diff --git a/apps/assets/utils.py b/apps/assets/utils.py index be8a80351..e1ed234e2 100644 --- a/apps/assets/utils.py +++ b/apps/assets/utils.py @@ -213,10 +213,10 @@ class NodeUtil: children.add(node) return list(children) - def get_children(self, node, with_self=True): + def get_all_children(self, node, with_self=True): return self.get_all_children_by_key(node.key, with_self=with_self) - def get_children_keys_by_key(self, key, with_self=True): + def get_all_children_keys_by_key(self, key, with_self=True): nodes = self.get_all_children_by_key(key, with_self=with_self) return [n.key for n in nodes] diff --git a/apps/perms/utils/asset_permission.py b/apps/perms/utils/asset_permission.py index 42c4060e8..9e5230894 100644 --- a/apps/perms/utils/asset_permission.py +++ b/apps/perms/utils/asset_permission.py @@ -449,6 +449,8 @@ class AssetPermissionUtil(AssetPermissionCacheMixin): self._nodes = None self._assets_direct = None self._nodes_direct = None + self.node_util = NodeUtil() + self.tree._node_util = self.node_util @staticmethod def change_org_if_need(): @@ -491,13 +493,14 @@ class AssetPermissionUtil(AssetPermissionCacheMixin): self.tree.add_nodes(nodes_keys) - pattern = set() + all_nodes_keys = set() for key in nodes_keys: - pattern.add(r'^{0}$|^{0}:'.format(key)) - pattern = '|'.join(list(pattern)) - if pattern: + children_keys = self.node_util.get_all_children_keys_by_key(key) + all_nodes_keys.update(set(children_keys)) + + if all_nodes_keys: assets_ids = Asset.objects.filter( - nodes__key__regex=pattern + nodes__key__in=all_nodes_keys ).valid().values_list("id", flat=True).distinct() else: assets_ids = []