• Main Page
  • Modules
  • Classes
  • Files
  • File List

classes/security/authorization/OmpSubmissionAccessPolicy.inc.php

00001 <?php
00015 import('classes.security.authorization.internal.PressPolicy');
00016 
00017 class OmpSubmissionAccessPolicy extends PressPolicy {
00026    function OmpSubmissionAccessPolicy(&$request, $args, $roleAssignments, $submissionParameterName = 'monographId') {
00027       parent::PressPolicy($request);
00028 
00029       // We need a submission in the request.
00030       import('classes.security.authorization.internal.MonographRequiredPolicy');
00031       $this->addPolicy(new MonographRequiredPolicy($request, $args, $submissionParameterName));
00032 
00033       // Authors, press managers and series editors potentially have
00034       // access to submissions. We'll have to define differentiated
00035       // policies for those roles in a policy set.
00036       $submissionAccessPolicy = new PolicySet(COMBINING_PERMIT_OVERRIDES);
00037 
00038 
00039       //
00040       // Managerial role
00041       //
00042       if (isset($roleAssignments[ROLE_ID_PRESS_MANAGER])) {
00043          // Press managers have access to all submissions.
00044          $submissionAccessPolicy->addPolicy(new RoleBasedHandlerOperationPolicy($request, ROLE_ID_PRESS_MANAGER, $roleAssignments[ROLE_ID_PRESS_MANAGER]));
00045       }
00046 
00047 
00048       //
00049       // Series editor role
00050       //
00051       if (isset($roleAssignments[ROLE_ID_SERIES_EDITOR])) {
00052          // 1) Series editors can access all operations on submissions ...
00053          $seriesEditorSubmissionAccessPolicy = new PolicySet(COMBINING_DENY_OVERRIDES);
00054          $seriesEditorSubmissionAccessPolicy->addPolicy(new RoleBasedHandlerOperationPolicy($request, ROLE_ID_SERIES_EDITOR, $roleAssignments[ROLE_ID_SERIES_EDITOR]));
00055 
00056          // 2) ... but only if the requested submission is part of their series.
00057          import('classes.security.authorization.internal.SeriesAssignmentPolicy');
00058          $seriesEditorSubmissionAccessPolicy->addPolicy(new SeriesAssignmentPolicy($request));
00059          $submissionAccessPolicy->addPolicy($seriesEditorSubmissionAccessPolicy);
00060       }
00061 
00062 
00063       //
00064       // Author role
00065       //
00066       if (isset($roleAssignments[ROLE_ID_AUTHOR])) {
00067          // 1) Author role user groups can access whitelisted operations ...
00068          $authorSubmissionAccessPolicy = new PolicySet(COMBINING_DENY_OVERRIDES);
00069          $authorSubmissionAccessPolicy->addPolicy(new RoleBasedHandlerOperationPolicy($request, ROLE_ID_AUTHOR, $roleAssignments[ROLE_ID_AUTHOR], 'user.authorization.authorRoleMissing'));
00070 
00071          // 2) ... if they meet one of the following requirements:
00072          $authorSubmissionAccessOptionsPolicy = new PolicySet(COMBINING_PERMIT_OVERRIDES);
00073 
00074          // 2a) ...the requested submission is their own ...
00075          import('classes.security.authorization.internal.MonographAuthorPolicy');
00076          $authorSubmissionAccessOptionsPolicy->addPolicy(new MonographAuthorPolicy($request));
00077 
00078          // 2b) ...OR, at least one workflow stage has been assigned to them in the requested submission.
00079          import('classes.security.authorization.internal.UserAccessibleWorkflowStageRequiredPolicy');
00080          $authorSubmissionAccessOptionsPolicy->addPolicy(new UserAccessibleWorkflowStageRequiredPolicy($request));
00081 
00082          $authorSubmissionAccessPolicy->addPolicy($authorSubmissionAccessOptionsPolicy);
00083          $submissionAccessPolicy->addPolicy($authorSubmissionAccessPolicy);
00084       }
00085 
00086 
00087       //
00088       // Reviewer role
00089       //
00090       if (isset($roleAssignments[ROLE_ID_REVIEWER])) {
00091          // 1) Reviewers can access whitelisted operations ...
00092          $reviewerSubmissionAccessPolicy = new PolicySet(COMBINING_DENY_OVERRIDES);
00093          $reviewerSubmissionAccessPolicy->addPolicy(new RoleBasedHandlerOperationPolicy($request, ROLE_ID_REVIEWER, $roleAssignments[ROLE_ID_REVIEWER]));
00094 
00095          // 2) ... but only if they have been assigned to the submission as reviewers.
00096          import('classes.security.authorization.internal.ReviewAssignmentAccessPolicy');
00097          $reviewerSubmissionAccessPolicy->addPolicy(new ReviewAssignmentAccessPolicy($request));
00098          $submissionAccessPolicy->addPolicy($reviewerSubmissionAccessPolicy);
00099       }
00100 
00101       //
00102       // Press role
00103       //
00104       if (isset($roleAssignments[ROLE_ID_PRESS_ASSISTANT])) {
00105          // 1) Press assistants can access whitelisted operations ...
00106          $pressSubmissionAccessPolicy = new PolicySet(COMBINING_DENY_OVERRIDES);
00107          $pressSubmissionAccessPolicy->addPolicy(new RoleBasedHandlerOperationPolicy($request, ROLE_ID_PRESS_ASSISTANT, $roleAssignments[ROLE_ID_PRESS_ASSISTANT]));
00108 
00109          // 2) ... but only if they have been assigned to the submission workflow.
00110          import('classes.security.authorization.internal.UserAccessibleWorkflowStageRequiredPolicy');
00111          $pressSubmissionAccessPolicy->addPolicy(new UserAccessibleWorkflowStageRequiredPolicy($request));
00112          $submissionAccessPolicy->addPolicy($pressSubmissionAccessPolicy);
00113       }
00114 
00115       $this->addPolicy($submissionAccessPolicy);
00116    }
00117 }
00118 
00119 ?>

Generated on Mon Sep 17 2012 13:58:55 for Open Monograph Press by  doxygen 1.7.1