From fc6ade7dcc551cdea56f9db884e0423cb0b98087 Mon Sep 17 00:00:00 2001 From: stumpylog <797416+stumpylog@users.noreply.github.com> Date: Thu, 6 Aug 2026 08:31:49 -0700 Subject: [PATCH] refactor: migrate all ViewSets to unified PermittedObjectsFilter Replace the deprecated ObjectOwnedOrGrantedPermissionsFilter, DocumentPermissionsFilter, and ObjectOwnedPermissionsFilter aliases with PermittedObjectsFilter directly across documents/views.py (8 sites, including TrashView's include_granted=False subclass) and paperless_mail/views.py (3 sites), then delete the now-unreferenced alias classes from documents/filters.py. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01UFyrt7FWbRRdTUAcdqBcsc --- src/documents/filters.py | 21 --------------------- src/documents/views.py | 26 ++++++++++++++------------ src/paperless_mail/views.py | 8 ++++---- 3 files changed, 18 insertions(+), 37 deletions(-) diff --git a/src/documents/filters.py b/src/documents/filters.py index e4f5f7b01..7a6dd153d 100644 --- a/src/documents/filters.py +++ b/src/documents/filters.py @@ -1058,27 +1058,6 @@ class PermittedObjectsFilter(BaseFilterBackend): ) -# Deprecated aliases for backwards compatibility -class ObjectOwnedOrGrantedPermissionsFilter(PermittedObjectsFilter): - """ - Deprecated: Use PermittedObjectsFilter instead. - """ - - -class DocumentPermissionsFilter(PermittedObjectsFilter): - """ - Deprecated: Use PermittedObjectsFilter instead. - """ - - -class ObjectOwnedPermissionsFilter(PermittedObjectsFilter): - """ - Deprecated: Use PermittedObjectsFilter instead. - """ - - include_granted = False - - class DocumentsOrderingFilter(OrderingFilter): field_name = "ordering" prefix = "custom_field_" diff --git a/src/documents/views.py b/src/documents/views.py index 8d3ef8b2b..2d4e7b8bd 100644 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -133,12 +133,10 @@ from documents.file_handling import format_filename from documents.filters import CorrespondentFilterSet from documents.filters import CustomFieldFilterSet from documents.filters import DocumentFilterSet -from documents.filters import DocumentPermissionsFilter from documents.filters import DocumentsOrderingFilter from documents.filters import DocumentTypeFilterSet -from documents.filters import ObjectOwnedOrGrantedPermissionsFilter -from documents.filters import ObjectOwnedPermissionsFilter from documents.filters import PaperlessTaskFilterSet +from documents.filters import PermittedObjectsFilter from documents.filters import ShareLinkBundleFilterSet from documents.filters import ShareLinkFilterSet from documents.filters import StoragePathFilterSet @@ -551,7 +549,7 @@ class CorrespondentViewSet( filter_backends = ( DjangoFilterBackend, OrderingFilter, - ObjectOwnedOrGrantedPermissionsFilter, + PermittedObjectsFilter, ) filterset_class = CorrespondentFilterSet ordering_fields = ( @@ -592,7 +590,7 @@ class TagViewSet(PermissionsAwareDocumentCountMixin, ModelViewSet[Tag]): filter_backends = ( DjangoFilterBackend, OrderingFilter, - ObjectOwnedOrGrantedPermissionsFilter, + PermittedObjectsFilter, ) filterset_class = TagFilterSet ordering_fields = ("color", "name", "matching_algorithm", "match", "document_count") @@ -684,7 +682,7 @@ class DocumentTypeViewSet( filter_backends = ( DjangoFilterBackend, OrderingFilter, - ObjectOwnedOrGrantedPermissionsFilter, + PermittedObjectsFilter, ) filterset_class = DocumentTypeFilterSet ordering_fields = ("name", "matching_algorithm", "match", "document_count") @@ -988,7 +986,7 @@ class DocumentViewSet( DjangoFilterBackend, SearchFilter, DocumentsOrderingFilter, - DocumentPermissionsFilter, + PermittedObjectsFilter, ) filterset_class = DocumentFilterSet search_fields = ("title", "correspondent__name", "effective_content") @@ -2674,7 +2672,7 @@ class SavedViewViewSet(BulkPermissionMixin, PassUserMixin, ModelViewSet[SavedVie permission_classes = (IsAuthenticated, PaperlessObjectPermissions) filter_backends = ( OrderingFilter, - ObjectOwnedOrGrantedPermissionsFilter, + PermittedObjectsFilter, ) ordering_fields = ("name",) @@ -3921,7 +3919,7 @@ class StoragePathViewSet(PermissionsAwareDocumentCountMixin, ModelViewSet[Storag filter_backends = ( DjangoFilterBackend, OrderingFilter, - ObjectOwnedOrGrantedPermissionsFilter, + PermittedObjectsFilter, ) filterset_class = StoragePathFilterSet ordering_fields = ("name", "path", "matching_algorithm", "match", "document_count") @@ -4452,7 +4450,7 @@ class ShareLinkViewSet( filter_backends = ( DjangoFilterBackend, OrderingFilter, - ObjectOwnedOrGrantedPermissionsFilter, + PermittedObjectsFilter, ) filterset_class = ShareLinkFilterSet ordering_fields = ("created", "expiration", "document") @@ -4482,7 +4480,7 @@ class ShareLinkBundleViewSet(PassUserMixin, ModelViewSet[ShareLinkBundle]): filter_backends = ( DjangoFilterBackend, OrderingFilter, - ObjectOwnedOrGrantedPermissionsFilter, + PermittedObjectsFilter, ) filterset_class = ShareLinkBundleFilterSet ordering_fields = ("created", "expiration", "status") @@ -5294,7 +5292,11 @@ class SystemStatusView(PassUserMixin): class TrashView(ListModelMixin, PassUserMixin): permission_classes = (IsAuthenticated,) serializer_class = TrashSerializer - filter_backends = (ObjectOwnedPermissionsFilter,) + + class _TrashPermittedObjectsFilter(PermittedObjectsFilter): + include_granted = False + + filter_backends = (_TrashPermittedObjectsFilter,) pagination_class = StandardPagination model = Document diff --git a/src/paperless_mail/views.py b/src/paperless_mail/views.py index 2e36f1b03..ec510b4e4 100644 --- a/src/paperless_mail/views.py +++ b/src/paperless_mail/views.py @@ -23,7 +23,7 @@ from rest_framework.response import Response from rest_framework.viewsets import ModelViewSet from rest_framework.viewsets import ReadOnlyModelViewSet -from documents.filters import ObjectOwnedOrGrantedPermissionsFilter +from documents.filters import PermittedObjectsFilter from documents.models import PaperlessTask from documents.permissions import PaperlessObjectPermissions from documents.permissions import has_perms_owner_aware @@ -75,7 +75,7 @@ class MailAccountViewSet(PassUserMixin, ModelViewSet[MailAccount]): serializer_class = MailAccountSerializer pagination_class = StandardPagination permission_classes = (IsAuthenticated, PaperlessObjectPermissions) - filter_backends = (ObjectOwnedOrGrantedPermissionsFilter,) + filter_backends = (PermittedObjectsFilter,) def get_permissions(self): if self.action == "test": @@ -197,7 +197,7 @@ class ProcessedMailViewSet(PassUserMixin, ReadOnlyModelViewSet[ProcessedMail]): filter_backends = ( DjangoFilterBackend, OrderingFilter, - ObjectOwnedOrGrantedPermissionsFilter, + PermittedObjectsFilter, ) filterset_class = ProcessedMailFilterSet @@ -225,7 +225,7 @@ class MailRuleViewSet(PassUserMixin, ModelViewSet[MailRule]): serializer_class = MailRuleSerializer pagination_class = StandardPagination permission_classes = (IsAuthenticated, PaperlessObjectPermissions) - filter_backends = (ObjectOwnedOrGrantedPermissionsFilter,) + filter_backends = (PermittedObjectsFilter,) @extend_schema_view(