Fix perms checking

This commit is contained in:
shamoon 2024-06-08 11:41:09 -07:00
parent dd1f076275
commit f463841dd5
2 changed files with 4 additions and 7 deletions

View File

@ -100,9 +100,9 @@ class TestTrashAPI(APITestCase):
def test_api_trash_insufficient_permissions(self): def test_api_trash_insufficient_permissions(self):
""" """
GIVEN: GIVEN:
- Existing document with owner in trash - Existing document with owner = user2 in trash
WHEN: WHEN:
- API request to empty trash - user 1 makes API request to empty document from trash
THEN: THEN:
- 403 Forbidden - 403 Forbidden
""" """

View File

@ -47,7 +47,6 @@ from django.views.decorators.http import condition
from django.views.decorators.http import last_modified from django.views.decorators.http import last_modified
from django.views.generic import TemplateView from django.views.generic import TemplateView
from django_filters.rest_framework import DjangoFilterBackend from django_filters.rest_framework import DjangoFilterBackend
from guardian.core import ObjectPermissionChecker
from langdetect import detect from langdetect import detect
from packaging import version as packaging_version from packaging import version as packaging_version
from redis import Redis from redis import Redis
@ -2058,7 +2057,7 @@ class SystemStatusView(PassUserMixin):
class TrashView(ListModelMixin, PassUserMixin): class TrashView(ListModelMixin, PassUserMixin):
permission_classes = (IsAuthenticated, PaperlessObjectPermissions) permission_classes = (IsAuthenticated,)
serializer_class = TrashSerializer serializer_class = TrashSerializer
filter_backends = (ObjectOwnedOrGrantedPermissionsFilter,) filter_backends = (ObjectOwnedOrGrantedPermissionsFilter,)
pagination_class = StandardPagination pagination_class = StandardPagination
@ -2081,10 +2080,8 @@ class TrashView(ListModelMixin, PassUserMixin):
if doc_ids is not None if doc_ids is not None
else Document.deleted_objects.all() else Document.deleted_objects.all()
) )
checker = ObjectPermissionChecker(request.user)
checker.prefetch_perms(docs)
for doc in docs: for doc in docs:
if not checker.has_perm("delete_document", doc): if not has_perms_owner_aware(request.user, "delete_document", doc):
return HttpResponseForbidden("Insufficient permissions") return HttpResponseForbidden("Insufficient permissions")
action = serializer.validated_data.get("action") action = serializer.validated_data.get("action")
if action == "restore": if action == "restore":