Skip to content

Commit 74fd0db

Browse files
committed
feat: pass file modification eval to deposit form
1 parent 8536ac4 commit 74fd0db

File tree

5 files changed

+35
-6
lines changed

5 files changed

+35
-6
lines changed

invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/deposit.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@
5151
{% if record_deletion %}
5252
<input type="hidden" name="deposits-record-deletion" value='{{ record_deletion | tojson }}'>
5353
{% endif %}
54+
{% if file_modification %}
55+
<input type="hidden" name="deposits-file-modification" value='{{ file_modification | tojson }}'>
56+
{% endif %}
5457
<input type="hidden" name="config-groups-enabled"
5558
value='{{ config.USERS_RESOURCES_GROUPS_ENABLED | tojson }}'>
5659
<input type="hidden" name="records-resources-allow-empty-files"

invenio_app_rdm/records_ui/utils.py

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@
1414
from flask import current_app, g
1515
from invenio_access.permissions import system_identity
1616
from invenio_rdm_records.requests.record_deletion import RecordDeletion
17-
from invenio_rdm_records.services.config import RDMRecordDeletionPolicy
17+
from invenio_rdm_records.services.config import (
18+
RDMRecordDeletionPolicy,
19+
FileModificationPolicyEvaluator,
20+
)
1821
from invenio_records.dictutils import dict_set
1922
from invenio_records.errors import MissingModelError
2023
from invenio_records_files.api import FileObject
@@ -120,10 +123,7 @@ def evaluate_record_deletion(record, draft=None):
120123

121124
immediate, request = rec_del["immediate_deletion"], rec_del["request_deletion"]
122125
rd_enabled = immediate.enabled or request.enabled
123-
rd_valid_user = (
124-
rec_del["immediate_deletion"].valid_user
125-
or rec_del["request_deletion"].valid_user
126-
)
126+
rd_valid_user = immediate.valid_user or request.valid_user
127127
rd_allowed = immediate.allowed or request.allowed
128128
existing_request = get_existing_deletion_request(record.id)
129129

@@ -154,3 +154,22 @@ def evaluate_record_deletion(record, draft=None):
154154
)
155155

156156
return record_deletion
157+
158+
159+
def evaluate_file_modification(record):
160+
"""Evaluate whether a given record file's can be edited by an identity."""
161+
file_mod = FileModificationPolicyEvaluator().evaluate(g.identity, record._record)
162+
163+
file_mod = file_mod["immediate_file_modification"]
164+
fm_allowed = file_mod.allowed
165+
166+
file_modification = {
167+
"enabled": file_mod.enabled,
168+
"valid_user": file_mod.valid_user,
169+
"allowed": fm_allowed,
170+
}
171+
if fm_allowed:
172+
file_modification["fileModification"] = file_mod
173+
file_modification["context"] = {}
174+
175+
return file_modification

invenio_app_rdm/records_ui/views/deposits.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
from marshmallow_utils.fields.babel import gettext_from_dict
3838
from sqlalchemy.orm import load_only
3939

40-
from ..utils import evaluate_record_deletion, set_default_value
40+
from ..utils import evaluate_record_deletion, set_default_value, evaluate_file_modification
4141
from .decorators import (
4242
no_cache_response,
4343
pass_draft,
@@ -542,8 +542,10 @@ def deposit_edit(pid_value, draft=None, draft_files=None, files_locked=True):
542542
published_record = ui_serializer.dump_obj(published_record_result.to_dict())
543543

544544
record_deletion = evaluate_record_deletion(published_record_result, draft)
545+
file_modification = evaluate_file_modification(published_record_result)
545546
else:
546547
record_deletion = {}
548+
file_modification = {}
547549

548550
community_ui = None
549551
community_theme = None
@@ -619,6 +621,7 @@ def deposit_edit(pid_value, draft=None, draft_files=None, files_locked=True):
619621
]
620622
),
621623
record_deletion=record_deletion,
624+
file_modification=file_modification,
622625
)
623626

624627

invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/deposit/RDMDepositForm.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ export class RDMDepositForm extends Component {
114114
recordRestrictionGracePeriod,
115115
allowRecordRestriction,
116116
recordDeletion,
117+
fileModification,
117118
groupsEnabled,
118119
allowEmptyFiles,
119120
useUppy,
@@ -138,6 +139,7 @@ export class RDMDepositForm extends Component {
138139
recordRestrictionGracePeriod={recordRestrictionGracePeriod}
139140
allowRecordRestriction={allowRecordRestriction}
140141
recordDeletion={recordDeletion}
142+
fileModification={fileModification}
141143
groupsEnabled={groupsEnabled}
142144
allowEmptyFiles={allowEmptyFiles}
143145
customFieldsUI={customFieldsUI}
@@ -210,6 +212,7 @@ export class RDMDepositForm extends Component {
210212
allowEmptyFiles={allowEmptyFiles}
211213
filesLocked={filesLocked}
212214
fileUploadConcurrency={config.fileUploadConcurrency}
215+
fileModification={fileModification}
213216
/>
214217
</Overridable>
215218
</AccordionField>

invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/deposit/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ ReactDOM.render(
2929
)}
3030
allowRecordRestriction={getInputFromDOM("deposits-allow-record-restriction")}
3131
recordDeletion={getInputFromDOM("deposits-record-deletion")}
32+
fileModification={getInputFromDOM("deposits-file-modification")}
3233
groupsEnabled={getInputFromDOM("config-groups-enabled")}
3334
allowEmptyFiles={getInputFromDOM("records-resources-allow-empty-files")}
3435
isDoiRequired={getInputFromDOM("deposits-is-doi-required")}

0 commit comments

Comments
 (0)