_request = $request; } // // Implement template methods from AuthorizationPolicy // /** * @see AuthorizationPolicy::effect() */ public function effect() { // Get the user $user = $this->_request->getUser(); if (!$user instanceof User) { return AuthorizationPolicy::AUTHORIZATION_DENY; } // Get the submission $submission = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_SUBMISSION); if (!$submission instanceof Submission) { return AuthorizationPolicy::AUTHORIZATION_DENY; } $context = $this->_request->getContext(); // Check authorship of the submission. Any ROLE_ID_AUTHOR assignment will do. $accessibleWorkflowStages = Repo::user()->getAccessibleWorkflowStages( $user->getId(), $context->getId(), $submission, $this->getAuthorizedContextObject(PKPApplication::ASSOC_TYPE_USER_ROLES) ); if (empty($accessibleWorkflowStages)) { return AuthorizationPolicy::AUTHORIZATION_DENY; } foreach ($accessibleWorkflowStages as $roles) { if (in_array(Role::ROLE_ID_AUTHOR, $roles)) { $this->addAuthorizedContextObject(Application::ASSOC_TYPE_ACCESSIBLE_WORKFLOW_STAGES, $accessibleWorkflowStages); return AuthorizationPolicy::AUTHORIZATION_PERMIT; } } return AuthorizationPolicy::AUTHORIZATION_DENY; } } if (!PKP_STRICT_MODE) { class_alias('\PKP\security\authorization\internal\SubmissionAuthorPolicy', '\SubmissionAuthorPolicy'); }