diff --git a/backend/src/baserow/core/registries.py b/backend/src/baserow/core/registries.py index 46bc6e1fa4..e6428a28d8 100755 --- a/backend/src/baserow/core/registries.py +++ b/backend/src/baserow/core/registries.py @@ -1024,11 +1024,29 @@ def get_objects_in_scopes(self, scopes: List[Any]) -> Dict[Any, Any]: parent_scope_types.add(object_scope_type) if parent_scopes: - query_result = list( - self.get_enhanced_queryset().filter( - self.get_filter_for_scopes(parent_scopes) + scopes_by_type = defaultdict(list) + for scope in parent_scopes: + scopes_by_type[object_scope_type_registry.get_by_model(scope)].append( + scope ) + + enhanced_queryset = self.get_enhanced_queryset() + ordering = ( + enhanced_queryset.query.order_by + or enhanced_queryset.model._meta.ordering + ) + + branches = [ + enhanced_queryset.filter( + self.get_filter_for_scope_type(scope_type, typed_scopes) + ).order_by() + for scope_type, typed_scopes in scopes_by_type.items() + ] + combined = ( + branches[0] if len(branches) == 1 else branches[0].union(*branches[1:]) ) + combined = combined.order_by(*ordering) + query_result = list(combined) # We have all the objects in the queryset, but now we want to sort them # into buckets per original scope they are a child of. diff --git a/changelog/entries/unreleased/bug/improve_permissions_endpoint_query_performance.json b/changelog/entries/unreleased/bug/improve_permissions_endpoint_query_performance.json new file mode 100644 index 0000000000..d9f88093c6 --- /dev/null +++ b/changelog/entries/unreleased/bug/improve_permissions_endpoint_query_performance.json @@ -0,0 +1,9 @@ +{ + "type": "bug", + "message": "Improve permissions endpoint query performance by using union instead of OR.", + "issue_origin": "github", + "issue_number": null, + "domain": "database", + "bullet_points": [], + "created_at": "2026-06-03" +} diff --git a/web-frontend/modules/core/components/crudTable/CrudTable.vue b/web-frontend/modules/core/components/crudTable/CrudTable.vue index ccd0fd0a18..6dc2ee8534 100644 --- a/web-frontend/modules/core/components/crudTable/CrudTable.vue +++ b/web-frontend/modules/core/components/crudTable/CrudTable.vue @@ -77,36 +77,47 @@
-