Skip to content

Commit f772801

Browse files
lunikaAntoLC
authored andcommitted
♻️(backend) change abilities for deleted document
The abilities for a deleted document were too open. We want to restrict them. Only the restore, retrieve and tree is allowed. The tree method will need some modifications to get the right informations.
1 parent 390a615 commit f772801

File tree

3 files changed

+68
-33
lines changed

3 files changed

+68
-33
lines changed

src/backend/core/models.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -721,7 +721,7 @@ def get_abilities(self, user):
721721

722722
# Characteristics that are based only on specific access
723723
is_owner = role == RoleChoices.OWNER
724-
is_deleted = self.ancestors_deleted_at and not is_owner
724+
is_deleted = self.ancestors_deleted_at
725725
is_owner_or_admin = (is_owner or role == RoleChoices.ADMIN) and not is_deleted
726726

727727
# Compute access roles before adding link roles because we don't
@@ -750,6 +750,7 @@ def get_abilities(self, user):
750750
role = RoleChoices.max(role, link_definition["link_role"])
751751

752752
can_get = bool(role) and not is_deleted
753+
retrieve = can_get or is_owner
753754
can_update = (
754755
is_owner_or_admin or role == RoleChoices.EDITOR
755756
) and not is_deleted
@@ -758,7 +759,7 @@ def get_abilities(self, user):
758759
is_owner
759760
if self.is_root()
760761
else (is_owner_or_admin or (user.is_authenticated and self.creator == user))
761-
)
762+
) and not is_deleted
762763

763764
ai_allow_reach_from = settings.AI_ALLOW_REACH_FROM
764765
ai_access = any(
@@ -790,15 +791,15 @@ def get_abilities(self, user):
790791
"duplicate": can_get and user.is_authenticated,
791792
"favorite": can_get and user.is_authenticated,
792793
"link_configuration": is_owner_or_admin,
793-
"invite_owner": is_owner,
794+
"invite_owner": is_owner and not is_deleted,
794795
"mask": can_get and user.is_authenticated,
795-
"move": is_owner_or_admin and not self.ancestors_deleted_at,
796+
"move": is_owner_or_admin and not is_deleted,
796797
"partial_update": can_update,
797798
"restore": is_owner,
798-
"retrieve": can_get,
799+
"retrieve": retrieve,
799800
"media_auth": can_get,
800801
"link_select_options": link_select_options,
801-
"tree": can_get,
802+
"tree": retrieve,
802803
"update": can_update,
803804
"versions_destroy": is_owner_or_admin,
804805
"versions_list": has_access_role,

src/backend/core/tests/documents/test_api_documents_trashbin.py

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -70,40 +70,40 @@ def test_api_documents_trashbin_format():
7070
assert results[0] == {
7171
"id": str(document.id),
7272
"abilities": {
73-
"accesses_manage": True,
74-
"accesses_view": True,
75-
"ai_transform": True,
76-
"ai_translate": True,
77-
"attachment_upload": True,
78-
"can_edit": True,
79-
"children_create": True,
80-
"children_list": True,
81-
"collaboration_auth": True,
82-
"descendants": True,
83-
"cors_proxy": True,
84-
"content": True,
85-
"destroy": True,
86-
"duplicate": True,
87-
"favorite": True,
88-
"invite_owner": True,
89-
"link_configuration": True,
73+
"accesses_manage": False,
74+
"accesses_view": False,
75+
"ai_transform": False,
76+
"ai_translate": False,
77+
"attachment_upload": False,
78+
"can_edit": False,
79+
"children_create": False,
80+
"children_list": False,
81+
"collaboration_auth": False,
82+
"descendants": False,
83+
"cors_proxy": False,
84+
"content": False,
85+
"destroy": False,
86+
"duplicate": False,
87+
"favorite": False,
88+
"invite_owner": False,
89+
"link_configuration": False,
9090
"link_select_options": {
9191
"authenticated": ["reader", "editor"],
9292
"public": ["reader", "editor"],
9393
"restricted": None,
9494
},
95-
"mask": True,
96-
"media_auth": True,
97-
"media_check": True,
95+
"mask": False,
96+
"media_auth": False,
97+
"media_check": False,
9898
"move": False, # Can't move a deleted document
99-
"partial_update": True,
99+
"partial_update": False,
100100
"restore": True,
101101
"retrieve": True,
102102
"tree": True,
103-
"update": True,
104-
"versions_destroy": True,
105-
"versions_list": True,
106-
"versions_retrieve": True,
103+
"update": False,
104+
"versions_destroy": False,
105+
"versions_list": False,
106+
"versions_retrieve": False,
107107
},
108108
"ancestors_link_reach": None,
109109
"ancestors_link_role": None,

src/backend/core/tests/test_models_documents.py

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -375,8 +375,42 @@ def test_models_documents_get_abilities_owner(django_assert_num_queries):
375375

376376
document.soft_delete()
377377
document.refresh_from_db()
378-
expected_abilities["move"] = False
379-
assert document.get_abilities(user) == expected_abilities
378+
assert document.get_abilities(user) == {
379+
"accesses_manage": False,
380+
"accesses_view": False,
381+
"ai_transform": False,
382+
"ai_translate": False,
383+
"attachment_upload": False,
384+
"can_edit": False,
385+
"children_create": False,
386+
"children_list": False,
387+
"collaboration_auth": False,
388+
"descendants": False,
389+
"cors_proxy": False,
390+
"content": False,
391+
"destroy": False,
392+
"duplicate": False,
393+
"favorite": False,
394+
"invite_owner": False,
395+
"link_configuration": False,
396+
"link_select_options": {
397+
"authenticated": ["reader", "editor"],
398+
"public": ["reader", "editor"],
399+
"restricted": None,
400+
},
401+
"mask": False,
402+
"media_auth": False,
403+
"media_check": False,
404+
"move": False,
405+
"partial_update": False,
406+
"restore": True,
407+
"retrieve": True,
408+
"tree": True,
409+
"update": False,
410+
"versions_destroy": False,
411+
"versions_list": False,
412+
"versions_retrieve": False,
413+
}
380414

381415

382416
@override_settings(

0 commit comments

Comments
 (0)