diff --git a/apps/perms/api/asset_permission.py b/apps/perms/api/asset_permission.py index 36bf00d9d..810ae5ac9 100644 --- a/apps/perms/api/asset_permission.py +++ b/apps/perms/api/asset_permission.py @@ -93,11 +93,15 @@ class AssetPermissionViewSet(viewsets.ModelViewSet): return queryset if not assets: return queryset.none() - inherit_nodes = set() - for asset in assets: - for node in asset.nodes.all(): - inherit_nodes.update(set(node.get_ancestor(with_self=True))) - queryset = queryset.filter(Q(assets__in=assets) | Q(nodes__in=inherit_nodes)) + inherit_all_nodes = set() + inherit_nodes_keys = assets.all().values_list('nodes__key', flat=True) + + for key in inherit_nodes_keys: + ancestor_keys = Node.get_nodes_ancestor_keys_by_key(key, with_self=True) + inherit_all_nodes.update(ancestor_keys) + queryset = queryset.filter( + Q(assets__in=assets) | Q(nodes__key__in=inherit_all_nodes) + ) return queryset def filter_user(self, queryset):