Open Journal Systems  3.3.0
RoleBasedHandlerOperationPolicyTest.php
1 <?php
2 
17 import('lib.pkp.tests.classes.security.authorization.PolicyTestCase');
18 import('lib.pkp.classes.security.authorization.AuthorizationDecisionManager');
19 import('lib.pkp.classes.security.authorization.RoleBasedHandlerOperationPolicy');
20 
21 define('ROLE_ID_TEST_2', 0x8888);
22 define('ROLE_ID_NON_AUTHORIZED', 0x7777);
23 define('ROLE_ID_OCS_MANAGERIAL_ROLE', 0x6666);
24 
26 
30  public function testRoleAuthorization() {
31  // Construct the user roles array.
32  $userRoles = array(ROLE_ID_SITE_ADMIN, ROLE_ID_TEST);
33 
34  // Test the user-group/role policy with a default
35  // authorized request.
36  $request = $this->getMockRequest('permittedOperation');
37  $rolePolicy = new PolicySet(COMBINING_DENY_OVERRIDES);
38  $rolePolicy->addPolicy($this->getAuthorizationContextManipulationPolicy());
39  $rolePolicy->addPolicy(new RoleBasedHandlerOperationPolicy($request, array(ROLE_ID_TEST), 'permittedOperation'));
40  $decisionManager = new AuthorizationDecisionManager();
41  $decisionManager->addPolicy($rolePolicy);
42  self::assertEquals(AUTHORIZATION_PERMIT, $decisionManager->decide());
43 
44  // Test the user-group/role policy with a non-authorized role.
45  $rolePolicy = new PolicySet(COMBINING_DENY_OVERRIDES);
46  $rolePolicy->addPolicy($this->getAuthorizationContextManipulationPolicy());
47  $rolePolicy->addPolicy(new RoleBasedHandlerOperationPolicy($request, ROLE_ID_NON_AUTHORIZED, 'permittedOperation'));
48  $decisionManager = new AuthorizationDecisionManager();
49  $decisionManager->addPolicy($rolePolicy);
50  self::assertEquals(AUTHORIZATION_DENY, $decisionManager->decide());
51 
52  // Test the policy with an authorized role but a non-authorized operation.
53  $request = $this->getMockRequest('privateOperation');
54  $rolePolicy = new PolicySet(COMBINING_DENY_OVERRIDES);
55  $rolePolicy->addPolicy($this->getAuthorizationContextManipulationPolicy());
56  $rolePolicy->addPolicy(new RoleBasedHandlerOperationPolicy($request, ROLE_ID_SITE_ADMIN, 'permittedOperation'));
57  $decisionManager = new AuthorizationDecisionManager();
58  $decisionManager->addPolicy($rolePolicy);
59  self::assertEquals(AUTHORIZATION_DENY, $decisionManager->decide());
60 
61  // Test the "all roles must match" feature.
62  $request = $this->getMockRequest('permittedOperation');
63  $rolePolicy = new PolicySet(COMBINING_DENY_OVERRIDES);
64  $rolePolicy->addPolicy($this->getAuthorizationContextManipulationPolicy());
65  $rolePolicy->addPolicy(new RoleBasedHandlerOperationPolicy($request, array(ROLE_ID_SITE_ADMIN, ROLE_ID_TEST), 'permittedOperation', 'some.message', true));
66  $decisionManager = new AuthorizationDecisionManager();
67  $decisionManager->addPolicy($rolePolicy);
68  self::assertEquals(AUTHORIZATION_PERMIT, $decisionManager->decide());
69 
70  // Test again the "all roles must match" feature but this time
71  // with one role not matching.
72  $rolePolicy = new PolicySet(COMBINING_DENY_OVERRIDES);
73  $rolePolicy->addPolicy($this->getAuthorizationContextManipulationPolicy());
74  $rolePolicy->addPolicy(new RoleBasedHandlerOperationPolicy($request, array(ROLE_ID_TEST, ROLE_ID_SITE_ADMIN, ROLE_ID_NON_AUTHORIZED), 'permittedOperation', 'some.message', true, false));
75  $decisionManager = new AuthorizationDecisionManager();
76  $decisionManager->addPolicy($rolePolicy);
77  self::assertEquals(AUTHORIZATION_DENY, $decisionManager->decide());
78  }
79 }
80 
PolicyTestCase\getAuthorizationContextManipulationPolicy
getAuthorizationContextManipulationPolicy()
Definition: PolicyTestCase.inc.php:67
PolicyTestCase\getMockRequest
getMockRequest($requestedOp, $context=null, $user=null)
Definition: PolicyTestCase.inc.php:109
RoleBasedHandlerOperationPolicyTest
Test class for the RoleBasedHandlerOperation class.
Definition: RoleBasedHandlerOperationPolicyTest.php:25
RoleBasedHandlerOperationPolicyTest\testRoleAuthorization
testRoleAuthorization()
Definition: RoleBasedHandlerOperationPolicyTest.php:30
AuthorizationDecisionManager
A class that can take a list of authorization policies, apply them to the current authorization reque...
Definition: AuthorizationDecisionManager.inc.php:30
RoleBasedHandlerOperationPolicy
Class to control access to handler operations via role based access control.
Definition: RoleBasedHandlerOperationPolicy.inc.php:18
PolicyTestCase
Abstract base test class that provides infrastructure for several types of policy tests.
Definition: PolicyTestCase.inc.php:24
PolicySet
An ordered list of policies. Policy sets can be added to decision managers like policies....
Definition: PolicySet.inc.php:26