mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-07-28 18:24:38 -05:00
Fix bulk setting null owner / permissions
This commit is contained in:
@@ -136,12 +136,10 @@ def set_permissions(doc_ids, set_permissions, owner=None):
|
||||
|
||||
qs = Document.objects.filter(id__in=doc_ids)
|
||||
|
||||
if owner is not None:
|
||||
update_owner_for_object.delay(document_ids=doc_ids, owner=owner)
|
||||
update_owner_for_object.delay(document_ids=doc_ids, owner=owner)
|
||||
|
||||
for doc in qs:
|
||||
if set_permissions is not None:
|
||||
set_permissions_for_object(set_permissions, doc)
|
||||
set_permissions_for_object(set_permissions, doc)
|
||||
|
||||
affected_docs = [doc.id for doc in qs]
|
||||
|
||||
|
@@ -103,7 +103,7 @@ class SetPermissionsMixin:
|
||||
)
|
||||
return groups
|
||||
|
||||
def validate_set_permissions(self, set_permissions):
|
||||
def validate_set_permissions(self, set_permissions=None):
|
||||
permissions_dict = {
|
||||
"view": {
|
||||
"users": User.objects.none(),
|
||||
@@ -612,12 +612,11 @@ class BulkEditSerializer(DocumentListSerializer, SetPermissionsMixin):
|
||||
return ownerUser
|
||||
|
||||
def _validate_parameters_set_permissions(self, parameters):
|
||||
if "permissions" in parameters:
|
||||
self.validate_set_permissions(parameters["permissions"])
|
||||
if "owner" in parameters:
|
||||
parameters["set_permissions"] = self.validate_set_permissions(
|
||||
parameters["set_permissions"],
|
||||
)
|
||||
if "owner" in parameters and parameters["owner"] is not None:
|
||||
self._validate_owner(parameters["owner"])
|
||||
if "permissions" not in parameters and "owner" not in parameters:
|
||||
raise serializers.ValidationError("permissions not specified")
|
||||
|
||||
def validate(self, attrs):
|
||||
|
||||
|
@@ -294,7 +294,7 @@ def update_document_archive_file(document_id):
|
||||
@shared_task
|
||||
def update_owner_for_object(document_ids, owner):
|
||||
documents = Document.objects.filter(id__in=document_ids)
|
||||
ownerUser = User.objects.get(pk=owner)
|
||||
ownerUser = User.objects.get(pk=owner) if owner is not None else None
|
||||
for document in documents:
|
||||
document.owner = ownerUser
|
||||
document.owner = ownerUser if owner is not None else None
|
||||
document.save()
|
||||
|
@@ -2331,30 +2331,40 @@ class TestBulkEdit(DirectoriesMixin, APITestCase):
|
||||
],
|
||||
)
|
||||
|
||||
def test_set_permissions(self):
|
||||
@mock.patch("documents.serialisers.bulk_edit.set_permissions")
|
||||
def test_set_permissions(self, m):
|
||||
m.return_value = "OK"
|
||||
user1 = User.objects.create(username="user1")
|
||||
user2 = User.objects.create(username="user2")
|
||||
permissions = {
|
||||
"view": {
|
||||
"users": User.objects.filter(id__in=[user1.id, user2.id]),
|
||||
"groups": Group.objects.none(),
|
||||
"users": [user1.id, user2.id],
|
||||
"groups": None,
|
||||
},
|
||||
"change": {
|
||||
"users": User.objects.filter(id__in=[user1.id]),
|
||||
"groups": Group.objects.none(),
|
||||
"users": [user1.id],
|
||||
"groups": None,
|
||||
},
|
||||
}
|
||||
|
||||
bulk_edit.set_permissions(
|
||||
[self.doc2.id, self.doc3.id],
|
||||
set_permissions=permissions,
|
||||
response = self.client.post(
|
||||
"/api/documents/bulk_edit/",
|
||||
json.dumps(
|
||||
{
|
||||
"documents": [self.doc2.id, self.doc3.id],
|
||||
"method": "set_permissions",
|
||||
"parameters": {"set_permissions": permissions},
|
||||
},
|
||||
),
|
||||
content_type="application/json",
|
||||
)
|
||||
|
||||
self.assertEqual(get_users_with_perms(self.doc2).count(), 2)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
self.async_task.assert_called_once()
|
||||
args, kwargs = self.async_task.call_args
|
||||
self.assertCountEqual(kwargs["document_ids"], [self.doc2.id, self.doc3.id])
|
||||
m.assert_called_once()
|
||||
args, kwargs = m.call_args
|
||||
self.assertCountEqual(args[0], [self.doc2.id, self.doc3.id])
|
||||
self.assertEqual(len(kwargs["set_permissions"]["view"]["users"]), 2)
|
||||
|
||||
|
||||
class TestBulkDownload(DirectoriesMixin, APITestCase):
|
||||
|
Reference in New Issue
Block a user