Skip to content

Commit 9e6f8fd

Browse files
committed
Update permissions for write preprint contributors
1 parent a179750 commit 9e6f8fd

File tree

1 file changed

+15
-1
lines changed

1 file changed

+15
-1
lines changed

api/actions/permissions.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,26 @@ def has_object_permission(self, request, view, obj):
4646
else:
4747
# Moderators and node admins can trigger state changes.
4848
is_node_admin = target is not None and target.has_permission(auth.user, osf_permissions.ADMIN)
49-
if not (is_node_admin or auth.user.has_perm('view_submissions', provider)):
49+
is_write_contributor = target is not None and target.has_permission(auth.user, osf_permissions.WRITE)
50+
51+
provisional_write_allowed = False
52+
if is_write_contributor:
53+
try:
54+
serializer = view.get_serializer(data=request.data)
55+
serializer.is_valid(raise_exception=True)
56+
trigger = serializer.validated_data.get('trigger')
57+
provisional_write_allowed = trigger == ReviewTriggers.SUBMIT.value
58+
except Exception:
59+
provisional_write_allowed = False
60+
61+
if not (is_node_admin or auth.user.has_perm('view_submissions', provider) or provisional_write_allowed):
5062
return False
5163

5264
# User can trigger state changes on this reviewable, but can they use this trigger in particular?
5365
serializer = view.get_serializer(data=request.data)
5466
serializer.is_valid(raise_exception=True)
5567
trigger = serializer.validated_data.get('trigger')
5668
permission = TRIGGER_PERMISSIONS[trigger]
69+
if permission is None and is_write_contributor and trigger == ReviewTriggers.SUBMIT.value:
70+
return True
5771
return permission is None or request.user.has_perm(permission, target.provider)

0 commit comments

Comments
 (0)