From 8404198ec8a53cde95c9e1a1a419a60779b7e355 Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Tue, 21 Jul 2026 07:31:58 -0700 Subject: [PATCH] Fix (beta): short-circuit ObjectOwnedOrGrantedPermissionsFilter for superusers (#13183) Mirrors the existing short-circuit already present in its sibling class, ObjectOwnedPermissionsFilter, which this one lacked. Benchmarked as a superuser against a 100k-document corpus: no measurable difference. django-guardian's own get_objects_for_user() (called via super().filter_queryset()) already returns the queryset unrestricted for superusers before this change, so the guardian permission tables were never actually queried for superusers either way. This change only skips building a redundant 3-way OR of conditions that are all subsets of the already-unrestricted queryset -- worth keeping for clarity/consistency with the sibling filter, not as a performance claim. Co-authored-by: Claude Sonnet 5 --- src/documents/filters.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/documents/filters.py b/src/documents/filters.py index e2e2501ce..fe15c927d 100644 --- a/src/documents/filters.py +++ b/src/documents/filters.py @@ -1024,6 +1024,8 @@ class ObjectOwnedOrGrantedPermissionsFilter(ObjectPermissionsFilter): """ def filter_queryset(self, request, queryset, view): + if request.user.is_superuser: + return queryset objects_with_perms = super().filter_queryset(request, queryset, view) objects_owned = queryset.filter(owner=request.user) objects_unowned = queryset.filter(owner__isnull=True)