]> git.ipfire.org Git - thirdparty/paperless-ngx.git/commitdiff
Fix bulk setting null owner / permissions
authorMichael Shamoon <4887959+shamoon@users.noreply.github.com>
Wed, 14 Dec 2022 07:26:23 +0000 (23:26 -0800)
committerMichael Shamoon <4887959+shamoon@users.noreply.github.com>
Wed, 14 Dec 2022 08:47:54 +0000 (00:47 -0800)
src-ui/src/app/components/common/edit-dialog/user-edit-dialog/user-edit-dialog.component.html
src-ui/src/app/components/common/permissions-dialog/permissions-dialog.component.ts
src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts
src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts
src/documents/bulk_edit.py
src/documents/serialisers.py
src/documents/tasks.py
src/documents/tests/test_api.py

index 1b811d5f727922f05a6a2cc9a5ef899b9c18577a..35c6a73bae6a089ddea7734ce9af28d412b27131 100644 (file)
@@ -18,7 +18,7 @@
             </div>
             <div class="form-check form-switch form-check-inline">
               <input type="checkbox" class="form-check-input" id="is_superuser" formControlName="is_superuser" (change)="onToggleSuperUser()">
-              <label class="form-check-label" for="is_superuser"><ng-container i18n>Superuser</ng-container> <small class="form-text text-muted ms-1" i18n>(Grants all permissions and objects)</small></label>
+              <label class="form-check-label" for="is_superuser"><ng-container i18n>Superuser</ng-container> <small class="form-text text-muted ms-1" i18n>(Grants all permissions and can view objects)</small></label>
             </div>
           </div>
 
index c786be5df86ec45a9c0b8cf9ea3a5c29aaface2d..fc659cca03c2c5d6d92061535d74838e74030e23 100644 (file)
@@ -1,7 +1,6 @@
 import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'
 import { FormControl, FormGroup } from '@angular/forms'
 import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
-import { PaperlessGroup } from 'src/app/data/paperless-group'
 import { PaperlessUser } from 'src/app/data/paperless-user'
 import { UserService } from 'src/app/services/rest/user.service'
 
@@ -31,12 +30,10 @@ export class PermissionsDialogComponent implements OnInit {
   })
 
   get permissions() {
-    console.log(this.form.get('permissions_form'))
-
     return {
-      owner: this.form.get('permissions_form')?.value['owner'],
+      owner: this.form.get('permissions_form').value?.owner ?? null,
       set_permissions:
-        this.form.get('permissions_form')?.value['set_permissions'],
+        this.form.get('permissions_form').value?.set_permissions ?? null,
     }
   }
 
index 850868079c860efd1ff0f6fed1a6cd21aeba63f1..eab0439a5841b29a66b0b80400eb34f6ec4e0766 100644 (file)
@@ -80,6 +80,7 @@ export class SavedViewWidgetComponent
 
   clickTag(tag: PaperlessTag, event: MouseEvent) {
     event.preventDefault()
+    event.stopImmediatePropagation()
 
     this.list.quickFilter([
       { rule_type: FILTER_HAS_TAGS_ALL, value: tag.id.toString() },
index bdb25c66dba528b7ba54c3c9a3bdfa5b41ed7b29..cfa7de00242526ddf1d5e12411559a4753ce053a 100644 (file)
@@ -494,8 +494,6 @@ export class BulkEditorComponent extends ComponentWithPermissions {
       backdrop: 'static',
     })
     modal.componentInstance.confirmClicked.subscribe((permissions) => {
-      console.log(permissions)
-
       modal.componentInstance.buttonsEnabled = false
       this.executeBulkOperation(modal, 'set_permissions', permissions)
     })
index c262ce61b603a0a1125b588d38f2ec6a0b9ac024..119484a4d6fdb3f1d5e00349f3c8dd11b7f97d65 100644 (file)
@@ -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]
 
index 6f4dc1ec90dff394b9aa2ab21f66f3b095a7fb07..89725f4d59a03bda2d71aedc40655814850f1e06 100644 (file)
@@ -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):
 
index 0e7c795c5118975fc7a1b3d96a130c7b28afcadc..40060d1f0acdef606c723cf735dd765d85338928 100644 (file)
@@ -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()
index 0cf0835be348231e4991123f1faa12428cfab734..56fea080c54ff97410410b053a05186d03a6f90f 100644 (file)
@@ -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):