]> git.ipfire.org Git - thirdparty/paperless-ngx.git/commitdiff
add api permissions test
authorMichael Shamoon <4887959+shamoon@users.noreply.github.com>
Thu, 24 Nov 2022 22:26:32 +0000 (14:26 -0800)
committerMichael Shamoon <4887959+shamoon@users.noreply.github.com>
Fri, 25 Nov 2022 06:09:28 +0000 (22:09 -0800)
src/documents/permissions.py
src/documents/tests/test_api.py
src/documents/views.py

index 5bf3b145de4f769e91f843ded8dc30bce7fd962f..86cc66c185aabbd2fa0acf3f68147b3b4b6f0b6a 100644 (file)
@@ -1,3 +1,4 @@
+from rest_framework.permissions import BasePermission
 from rest_framework.permissions import DjangoModelPermissions
 
 
@@ -11,3 +12,8 @@ class PaperlessModelPermissions(DjangoModelPermissions):
         "PATCH": ["%(app_label)s.change_%(model_name)s"],
         "DELETE": ["%(app_label)s.delete_%(model_name)s"],
     }
+
+
+class PaperlessAdminPermissions(BasePermission):
+    def has_permission(self, request, view):
+        return request.user.has_perm("admin.view_logentry")
index af061fa7fad3c18ad63f785abef8eb63753e776e..d70452fddaf86ba150424560752c2f075d15f87a 100644 (file)
@@ -20,6 +20,7 @@ except ImportError:
 import pytest
 from django.conf import settings
 from django.contrib.auth.models import Group
+from django.contrib.auth.models import Permission
 from django.contrib.auth.models import User
 from django.test import override_settings
 from django.utils import timezone
@@ -2540,6 +2541,41 @@ class TestApiAuth(DirectoriesMixin, APITestCase):
         self.assertIn("X-Api-Version", response)
         self.assertIn("X-Version", response)
 
+    def test_api_insufficient_permissions(self):
+        user = User.objects.create_user(username="test")
+        self.client.force_authenticate(user)
+
+        d = Document.objects.create(title="Test")
+
+        self.assertEqual(self.client.get("/api/documents/").status_code, 403)
+
+        self.assertEqual(self.client.get(f"/api/documents/{d.id}/").status_code, 403)
+
+        self.assertEqual(self.client.get("/api/tags/").status_code, 403)
+        self.assertEqual(self.client.get("/api/correspondents/").status_code, 403)
+        self.assertEqual(self.client.get("/api/document_types/").status_code, 403)
+
+        self.assertEqual(self.client.get("/api/logs/").status_code, 403)
+        self.assertEqual(self.client.get("/api/saved_views/").status_code, 403)
+
+    def test_api_sufficient_permissions(self):
+        user = User.objects.create_user(username="test")
+        user.user_permissions.add(*Permission.objects.all())
+        self.client.force_authenticate(user)
+
+        d = Document.objects.create(title="Test")
+
+        self.assertEqual(self.client.get("/api/documents/").status_code, 200)
+
+        self.assertEqual(self.client.get(f"/api/documents/{d.id}/").status_code, 200)
+
+        self.assertEqual(self.client.get("/api/tags/").status_code, 200)
+        self.assertEqual(self.client.get("/api/correspondents/").status_code, 200)
+        self.assertEqual(self.client.get("/api/document_types/").status_code, 200)
+
+        self.assertEqual(self.client.get("/api/logs/").status_code, 200)
+        self.assertEqual(self.client.get("/api/saved_views/").status_code, 200)
+
 
 class TestApiRemoteVersion(DirectoriesMixin, APITestCase):
     ENDPOINT = "/api/remote_version/"
index e7557eb7dc5e2da71ce51d57157eb3757e6f6c3b..9ffc2369360f659bbff188588d1f1c5b1c796957 100644 (file)
@@ -28,6 +28,7 @@ from django.utils.translation import get_language
 from django.views.decorators.cache import cache_control
 from django.views.generic import TemplateView
 from django_filters.rest_framework import DjangoFilterBackend
+from documents.permissions import PaperlessAdminPermissions
 from documents.permissions import PaperlessModelPermissions
 from documents.tasks import consume_file
 from packaging import version as packaging_version
@@ -523,7 +524,7 @@ class UnifiedSearchViewSet(DocumentViewSet):
 
 class LogViewSet(ViewSet):
 
-    permission_classes = (IsAuthenticated,)
+    permission_classes = (IsAuthenticated, PaperlessAdminPermissions)
 
     log_files = ["paperless", "mail"]