Skip to content

Commit 239d9fb

Browse files
committed
fix: allow rendering request page without file permissions
1 parent d1c48cc commit 239d9fb

File tree

1 file changed

+51
-32
lines changed

1 file changed

+51
-32
lines changed

invenio_app_rdm/requests_ui/views/requests.py

Lines changed: 51 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -134,44 +134,63 @@ def _resolve_topic_record(request):
134134
return dict(permissions={}, record_ui=None, record=None)
135135

136136

137+
def _list_files(service, record_pid):
138+
return service.list_files(id_=record_pid, identity=g.identity).to_dict()
139+
140+
137141
def _resolve_record_or_draft_files(record, request):
138-
"""Resolve the record's or draft's files."""
139-
if record and record["files"]["enabled"]:
140-
record_pid = record["id"]
141-
is_draft = record.get("is_draft", False)
142+
"""Resolve the record's or draft's files.
143+
144+
Returns None if the record has no files, files are disabled, or if the
145+
user doesn't have permission to access them (e.g. user-access-request
146+
where the requester can view the request but not the record's files).
147+
"""
148+
if not record or not record["files"]["enabled"]:
149+
return None
150+
151+
record_pid = record["id"]
152+
is_draft = record.get("is_draft", False)
153+
154+
primary_service = draft_files_service() if is_draft else files_service()
155+
fallback_service = files_service()
156+
157+
try:
158+
return _list_files(primary_service, record_pid)
159+
except NoResultFound:
160+
# Fallback to regular files service
142161
try:
143-
if is_draft:
144-
files = draft_files_service().list_files(
145-
id_=record_pid, identity=g.identity
146-
)
147-
else:
148-
files = files_service().list_files(id_=record_pid, identity=g.identity)
149-
except NoResultFound:
150-
files = files_service().list_files(id_=record_pid, identity=g.identity)
151-
return files.to_dict()
152-
return None
162+
return _list_files(fallback_service, record_pid)
163+
except PermissionDeniedError:
164+
return None
165+
except PermissionDeniedError:
166+
return None
153167

154168

155169
def _resolve_record_or_draft_media_files(record, request):
156-
"""Resolve the record's or draft's media files."""
157-
if record and record["media_files"]["enabled"]:
158-
record_pid = record["id"]
159-
is_draft = record.get("is_draft", False)
170+
"""Resolve the record's or draft's media files.
171+
172+
Returns None if the record has no media files, media files are disabled,
173+
or if the user doesn't have permission to access them (e.g. user-access-request
174+
where the requester can view the request but not the record's media files).
175+
"""
176+
if not record or not record["media_files"]["enabled"]:
177+
return None
178+
179+
record_pid = record["id"]
180+
is_draft = record.get("is_draft", False)
181+
182+
primary_service = draft_media_files_service() if is_draft else media_files_service()
183+
fallback_service = media_files_service()
184+
185+
try:
186+
return _list_files(primary_service, record_pid)
187+
except NoResultFound:
160188
try:
161-
if is_draft:
162-
media_files = draft_media_files_service().list_files(
163-
id_=record_pid, identity=g.identity
164-
)
165-
else:
166-
media_files = media_files_service().list_files(
167-
id_=record_pid, identity=g.identity
168-
)
169-
except NoResultFound:
170-
media_files = media_files_service().list_files(
171-
id_=record_pid, identity=g.identity
172-
)
173-
return media_files.to_dict()
174-
return None
189+
return _list_files(fallback_service, record_pid)
190+
except PermissionDeniedError:
191+
return None
192+
except PermissionDeniedError:
193+
return None
175194

176195

177196
@login_required

0 commit comments

Comments
 (0)