Chore: Consolidate to a single way to set permission on an object (#14453)

* Chore: drop set_permissions_for_object in favor of the bulk helper

The same grant rules were implemented twice, and only the bulk version
validated every action before writing, so the single-object one could leave
a partial change behind.

* Chore: type the set-permissions dict

Callers passed whatever they had, including querysets of User and Group
objects that only worked because id__in accepts a subquery.
This commit is contained in:
Trenton H authored and GitHub committed 2026-10-24 13:28:25 -07:00
1 parent a74256cd2a
commit e7d70497c2
6 files changed
+73 -149

No files matched your search

+12 -9
View File
@@ -7,7 +7,8 @@ from documents.data_models import DocumentMetadataOverrides
from documents.models import CustomFieldInstance
from documents.models import Document
from documents.models import WorkflowAction
from documents.permissions import set_permissions_for_object
from documents.permissions import PermissionsSpec
from documents.permissions import set_permissions_for_objects
from documents.templating.workflows import parse_w_workflow_placeholders
logger = logging.getLogger("paperless.workflows.mutations")
@@ -73,7 +74,7 @@ def apply_assignment_to_document(
action.has_assign_change_groups,
],
):
permissions = {
permissions: PermissionsSpec = {
"view": {
"users": action.assign_view_users.values_list("id", flat=True),
"groups": action.assign_view_groups.values_list("id", flat=True),
@@ -83,9 +84,10 @@ def apply_assignment_to_document(
"groups": action.assign_change_groups.values_list("id", flat=True),
},
}
set_permissions_for_object(
permissions=permissions,
object=document,
set_permissions_for_objects(
permissions,
Document,
[document.pk],
merge=True,
)
@@ -243,13 +245,14 @@ def apply_removal_to_document(
document.owner = None
if action.remove_all_permissions:
permissions = {
permissions: PermissionsSpec = {
"view": {"users": [], "groups": []},
"change": {"users": [], "groups": []},
}
set_permissions_for_object(
permissions=permissions,
object=document,
set_permissions_for_objects(
permissions,
Document,
[document.pk],
merge=False,
)