From 451e02b7ca13118bd3710598198dfe7cfe53a21d Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sun, 1 Dec 2024 00:40:13 -0800 Subject: [PATCH] Make object permissions show --- src/documents/schema.py | 28 ++++++++++++++++++++++++++++ src/documents/serialisers.py | 18 ++++++++++-------- src/documents/views.py | 31 +++++-------------------------- 3 files changed, 43 insertions(+), 34 deletions(-) diff --git a/src/documents/schema.py b/src/documents/schema.py index d97c4e618..7850fd3de 100644 --- a/src/documents/schema.py +++ b/src/documents/schema.py @@ -1,4 +1,7 @@ from drf_spectacular.extensions import OpenApiAuthenticationExtension +from drf_spectacular.types import OpenApiTypes +from drf_spectacular.utils import OpenApiParameter +from drf_spectacular.utils import extend_schema class AngularApiAuthenticationOverrideScheme(OpenApiAuthenticationExtension): @@ -10,3 +13,28 @@ class AngularApiAuthenticationOverrideScheme(OpenApiAuthenticationExtension): "name": "Angular Authorization", "description": "Automatic Angular authentication for the dev server", } + + +def generate_object_with_permissions_schema(serializer_class): + return { + "list": extend_schema( + parameters=[ + OpenApiParameter( + name="full_perms", + type=OpenApiTypes.BOOL, + location=OpenApiParameter.QUERY, + ), + ], + responses={200: serializer_class(many=True, all_fields=True)}, + ), + "retrieve": extend_schema( + parameters=[ + OpenApiParameter( + name="full_perms", + type=OpenApiTypes.BOOL, + location=OpenApiParameter.QUERY, + ), + ], + responses={200: serializer_class(many=True, all_fields=True)}, + ), + } diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index 2bed3efe5..9df3ea285 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -181,6 +181,7 @@ class SerializerWithPerms(serializers.Serializer): def __init__(self, *args, **kwargs): self.user = kwargs.pop("user", None) self.full_perms = kwargs.pop("full_perms", False) + self.all_fields = kwargs.pop("all_fields", False) super().__init__(*args, **kwargs) @@ -229,14 +230,15 @@ class OwnedObjectSerializer( def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - try: - if self.full_perms: - self.fields.pop("user_can_change") - self.fields.pop("is_shared_by_requester") - else: - self.fields.pop("permissions") - except KeyError: - pass + if not self.all_fields: + try: + if self.full_perms: + self.fields.pop("user_can_change") + self.fields.pop("is_shared_by_requester") + else: + self.fields.pop("permissions") + except KeyError: + pass @extend_schema_field( field={ diff --git a/src/documents/views.py b/src/documents/views.py index bd9314e7a..8ca22a455 100644 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -133,6 +133,7 @@ from documents.permissions import PaperlessObjectPermissions from documents.permissions import get_objects_for_user_owner_aware from documents.permissions import has_perms_owner_aware from documents.permissions import set_permissions_for_object +from documents.schema import generate_object_with_permissions_schema from documents.serialisers import AcknowledgeTasksViewSerializer from documents.serialisers import BulkDownloadSerializer from documents.serialisers import BulkEditObjectsSerializer @@ -262,29 +263,7 @@ class PermissionsAwareDocumentCountMixin(PassUserMixin): ) -full_perms_schema = { - "list": extend_schema( - parameters=[ - OpenApiParameter( - name="full_perms", - type=OpenApiTypes.BOOL, - location=OpenApiParameter.QUERY, - ), - ], - ), - "retrieve": extend_schema( - parameters=[ - OpenApiParameter( - name="full_perms", - type=OpenApiTypes.BOOL, - location=OpenApiParameter.QUERY, - ), - ], - ), -} - - -@extend_schema_view(**full_perms_schema) +@extend_schema_view(**generate_object_with_permissions_schema(CorrespondentSerializer)) class CorrespondentViewSet(ModelViewSet, PermissionsAwareDocumentCountMixin): model = Correspondent @@ -321,7 +300,7 @@ class CorrespondentViewSet(ModelViewSet, PermissionsAwareDocumentCountMixin): return super().retrieve(request, *args, **kwargs) -@extend_schema_view(**full_perms_schema) +@extend_schema_view(**generate_object_with_permissions_schema(TagSerializer)) class TagViewSet(ModelViewSet, PermissionsAwareDocumentCountMixin): model = Tag @@ -346,7 +325,7 @@ class TagViewSet(ModelViewSet, PermissionsAwareDocumentCountMixin): ordering_fields = ("color", "name", "matching_algorithm", "match", "document_count") -@extend_schema_view(**full_perms_schema) +@extend_schema_view(**generate_object_with_permissions_schema(DocumentTypeSerializer)) class DocumentTypeViewSet(ModelViewSet, PermissionsAwareDocumentCountMixin): model = DocumentType @@ -2023,7 +2002,7 @@ class BulkDownloadView(GenericAPIView): return response -@extend_schema_view(**full_perms_schema) +@extend_schema_view(**generate_object_with_permissions_schema(StoragePathSerializer)) class StoragePathViewSet(ModelViewSet, PermissionsAwareDocumentCountMixin): model = StoragePath