Fix perms checking
This commit is contained in:
parent
dd1f076275
commit
f463841dd5
@ -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
|
||||||
"""
|
"""
|
||||||
|
@ -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":
|
||||||
|
Loading…
x
Reference in New Issue
Block a user