getRequest(); // Get the user $user = $request->getUser(); if (!$user instanceof \PKP\user\User) { return AuthorizationPolicy::AUTHORIZATION_DENY; } // Get the submission file $submissionFile = $this->getSubmissionFile($request); if (!$submissionFile instanceof SubmissionFile) { return AuthorizationPolicy::AUTHORIZATION_DENY; } $context = $request->getContext(); $reviewAssignmentDao = DAORegistry::getDAO('ReviewAssignmentDAO'); /** @var ReviewAssignmentDAO $reviewAssignmentDao */ $reviewAssignments = $reviewAssignmentDao->getByUserId($user->getId()); $reviewFilesDao = DAORegistry::getDAO('ReviewFilesDAO'); /** @var ReviewFilesDAO $reviewFilesDao */ foreach ($reviewAssignments as $reviewAssignment) { if ($context->getData('restrictReviewerFileAccess') && !$reviewAssignment->getDateConfirmed()) { continue; } // Determine which file stage the requested file should be in. $reviewFileStage = null; switch ($reviewAssignment->getStageId()) { case WORKFLOW_STAGE_ID_INTERNAL_REVIEW: $reviewFileStage = SubmissionFile::SUBMISSION_FILE_INTERNAL_REVIEW_FILE; break; case WORKFLOW_STAGE_ID_EXTERNAL_REVIEW: $reviewFileStage = SubmissionFile::SUBMISSION_FILE_REVIEW_FILE; break; default: throw new Exception('Unknown review workflow stage ID!'); } if ( $submissionFile->getData('submissionId') == $reviewAssignment->getSubmissionId() && $submissionFile->getData('fileStage') == $reviewFileStage && $reviewFilesDao->check($reviewAssignment->getId(), $submissionFile->getId()) ) { $this->addAuthorizedContextObject(Application::ASSOC_TYPE_REVIEW_ASSIGNMENT, $reviewAssignment); return AuthorizationPolicy::AUTHORIZATION_PERMIT; } } // If a pass condition wasn't found above, deny access. return AuthorizationPolicy::AUTHORIZATION_DENY; } } if (!PKP_STRICT_MODE) { class_alias('\PKP\security\authorization\internal\SubmissionFileAssignedReviewerAccessPolicy', '\SubmissionFileAssignedReviewerAccessPolicy'); }