-
+ |
-
+ |
{{ task.task_file_name }} |
{{ task.date_created | customDate:'short' }} |
diff --git a/src-ui/src/app/data/object-with-permissions.ts b/src-ui/src/app/data/object-with-permissions.ts
index 9346aa85c..29db6bf26 100644
--- a/src-ui/src/app/data/object-with-permissions.ts
+++ b/src-ui/src/app/data/object-with-permissions.ts
@@ -1,5 +1,4 @@
import { ObjectWithId } from './object-with-id'
-import { PaperlessUser } from './paperless-user'
export interface PermissionsObject {
view: {
diff --git a/src-ui/src/app/services/rest/abstract-name-filter-service.spec.ts b/src-ui/src/app/services/rest/abstract-name-filter-service.spec.ts
index e4ec93aeb..70ae211e5 100644
--- a/src-ui/src/app/services/rest/abstract-name-filter-service.spec.ts
+++ b/src-ui/src/app/services/rest/abstract-name-filter-service.spec.ts
@@ -39,6 +39,31 @@ export const commonAbstractNameFilterPaperlessServiceTests = (
expect(req.request.method).toEqual('GET')
req.flush([])
})
+
+ test('should call appropriate api endpoint for bulk permissions edit', () => {
+ const owner = 3
+ const permissions = {
+ view: {
+ users: [],
+ groups: [3],
+ },
+ change: {
+ users: [12, 13],
+ groups: [],
+ },
+ }
+ subscription = service
+ .bulk_update_permissions([1, 2], {
+ owner,
+ set_permissions: permissions,
+ })
+ .subscribe()
+ const req = httpTestingController.expectOne(
+ `${environment.apiBaseUrl}bulk_edit_object_perms/`
+ )
+ expect(req.request.method).toEqual('POST')
+ req.flush([])
+ })
})
beforeEach(() => {
diff --git a/src-ui/src/app/services/rest/abstract-name-filter-service.ts b/src-ui/src/app/services/rest/abstract-name-filter-service.ts
index 1164545b2..5e0377cb9 100644
--- a/src-ui/src/app/services/rest/abstract-name-filter-service.ts
+++ b/src-ui/src/app/services/rest/abstract-name-filter-service.ts
@@ -1,5 +1,7 @@
import { ObjectWithId } from 'src/app/data/object-with-id'
import { AbstractPaperlessService } from './abstract-paperless-service'
+import { PermissionsObject } from 'src/app/data/object-with-permissions'
+import { Observable } from 'rxjs'
export abstract class AbstractNameFilterService<
T extends ObjectWithId,
@@ -21,4 +23,16 @@ export abstract class AbstractNameFilterService<
}
return this.list(page, pageSize, sortField, sortReverse, params)
}
+
+ bulk_update_permissions(
+ objects: Array,
+ permissions: { owner: number; set_permissions: PermissionsObject }
+ ): Observable {
+ return this.http.post(`${this.baseUrl}bulk_edit_object_perms/`, {
+ objects,
+ object_type: this.resourceName,
+ owner: permissions.owner,
+ permissions: permissions.set_permissions,
+ })
+ }
}
diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py
index 47ee2ac85..0f99d5dcc 100644
--- a/src/documents/serialisers.py
+++ b/src/documents/serialisers.py
@@ -973,10 +973,10 @@ class BulkEditObjectPermissionsSerializer(serializers.Serializer, SetPermissions
object_type = serializers.ChoiceField(
choices=[
- "tag",
- "correspondent",
- "document_type",
- "storage_path",
+ "tags",
+ "correspondents",
+ "document_types",
+ "storage_paths",
],
label="Object Type",
write_only=True,
@@ -997,13 +997,13 @@ class BulkEditObjectPermissionsSerializer(serializers.Serializer, SetPermissions
def get_object_class(self, object_type):
object_class = None
- if object_type == "tag":
+ if object_type == "tags":
object_class = Tag
- elif object_type == "correspondent":
+ elif object_type == "correspondents":
object_class = Correspondent
- elif object_type == "document_type":
+ elif object_type == "document_types":
object_class = DocumentType
- elif object_type == "storage_path":
+ elif object_type == "storage_paths":
object_class = StoragePath
return object_class
@@ -1013,10 +1013,6 @@ class BulkEditObjectPermissionsSerializer(serializers.Serializer, SetPermissions
if not all(isinstance(i, int) for i in objects):
raise serializers.ValidationError("objects must be a list of integers")
object_class = self.get_object_class(object_type)
- if object_class is None:
- raise serializers.ValidationError(
- "Unknown object type.",
- )
count = object_class.objects.filter(id__in=objects).count()
if not count == len(objects):
raise serializers.ValidationError(
diff --git a/src/documents/tests/test_api.py b/src/documents/tests/test_api.py
index b390cf86b..d4d6afe04 100644
--- a/src/documents/tests/test_api.py
+++ b/src/documents/tests/test_api.py
@@ -5100,6 +5100,9 @@ class TestBulkEditObjectPermissions(APITestCase):
self.t1 = Tag.objects.create(name="t1")
self.t2 = Tag.objects.create(name="t2")
+ self.c1 = Correspondent.objects.create(name="c1")
+ self.dt1 = DocumentType.objects.create(name="dt1")
+ self.sp1 = StoragePath.objects.create(name="sp1")
self.user1 = User.objects.create(username="user1")
self.user2 = User.objects.create(username="user2")
self.user3 = User.objects.create(username="user3")
@@ -5129,7 +5132,7 @@ class TestBulkEditObjectPermissions(APITestCase):
json.dumps(
{
"objects": [self.t1.id, self.t2.id],
- "object_type": "tag",
+ "object_type": "tags",
"permissions": permissions,
},
),
@@ -5189,7 +5192,7 @@ class TestBulkEditObjectPermissions(APITestCase):
json.dumps(
{
"objects": [self.t1.id, self.t2.id],
- "object_type": "tag",
+ "object_type": "tags",
"owner": self.user3.id,
},
),
@@ -5232,7 +5235,7 @@ class TestBulkEditObjectPermissions(APITestCase):
json.dumps(
{
"objects": [self.t1.id, self.t2.id],
- "object_type": "tag",
+ "object_type": "tags",
"owner": self.user1.id,
},
),
|