From ee3c13687d8c0211cceba6901afdf8657b8c9f27 Mon Sep 17 00:00:00 2001 From: Christian Hartmann Date: Sat, 4 Apr 2026 15:10:42 +0200 Subject: [PATCH] fix(api): enforce submission visibility based on user permissions fix(submit): adjust conditional rendering for submission state Signed-off-by: Christian Hartmann --- lib/Controller/ApiController.php | 6 ++++++ src/views/Submit.vue | 10 +++++++++- tests/Unit/Controller/ApiControllerTest.php | 15 +++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/lib/Controller/ApiController.php b/lib/Controller/ApiController.php index 7a2a1d012..8a5797564 100644 --- a/lib/Controller/ApiController.php +++ b/lib/Controller/ApiController.php @@ -1259,6 +1259,8 @@ public function getSubmissions(int $formId, ?string $query = null, ?int $limit = #[ApiRoute(verb: 'GET', url: '/api/v3/forms/{formId}/submissions/{submissionId}')] public function getSubmission(int $formId, int $submissionId): DataResponse|DataDownloadResponse { $form = $this->formsService->getFormIfAllowed($formId, Constants::PERMISSION_RESULTS); + $permissions = $this->formsService->getPermissions($form); + $canSeeAllSubmissions = in_array(Constants::PERMISSION_RESULTS, $permissions, true); $submission = $this->submissionService->getSubmission($submissionId); if ($submission === null) { @@ -1269,6 +1271,10 @@ public function getSubmission(int $formId, int $submissionId): DataResponse|Data throw new OCSBadRequestException('Submission doesn\'t belong to given form'); } + if (!$canSeeAllSubmissions && $submission['userId'] !== $this->currentUser->getUID()) { + throw new OCSForbiddenException('User is not allowed to see submission'); + } + // Append Display Names if (substr($submission['userId'], 0, 10) === 'anon-user-') { // Anonymous User diff --git a/src/views/Submit.vue b/src/views/Submit.vue index bcc30bcc9..4f800ece2 100644 --- a/src/views/Submit.vue +++ b/src/views/Submit.vue @@ -57,7 +57,7 @@