Open Monograph Press  3.3.0
UserRolesRequiredPolicy.inc.php
1 <?php
16 import('lib.pkp.classes.security.authorization.AuthorizationPolicy');
17 
20  var $_request;
21 
27  function __construct($request) {
28  parent::__construct();
29  $this->_request = $request;
30  }
31 
32 
33  //
34  // Implement template methods from AuthorizationPolicy
35  //
39  function effect() {
40  $request = $this->_request;
41  $user = $request->getUser();
42 
43  if (!is_a($user, 'User')) {
44  return AUTHORIZATION_DENY;
45  }
46 
47  // Get all user roles.
48  $roleDao = DAORegistry::getDAO('RoleDAO'); /* @var $roleDao RoleDAO */
49  $userRoles = $roleDao->getByUserIdGroupedByContext($user->getId());
50 
51  // Prepare an array with the context ids of the request.
53  $contextDepth = $application->getContextDepth();
54  $router = $request->getRouter();
55  $roleContext = array();
56  for ($contextLevel = 1; $contextLevel <= $contextDepth; $contextLevel++) {
57  $context = $router->getContext($request, $contextLevel);
58  $roleContext[] = $context?$context->getId():CONTEXT_ID_NONE;
59  }
60 
61  $contextRoles = $this->_getContextRoles($roleContext, $contextDepth, $userRoles);
62 
63  $this->addAuthorizedContextObject(ASSOC_TYPE_USER_ROLES, $contextRoles);
64  return AUTHORIZATION_PERMIT;
65  }
66 
74  function _getContextRoles($roleContext, $contextDepth, $userRoles) {
75  // Adapt the role context based on the passed role id.
76  $workingRoleContext = $roleContext;
77  $roleDao = DAORegistry::getDAO('RoleDAO'); /* @var $roleDao RoleDAO */
78  $contextRoles = array();
79 
80  // Check if user has site level or manager roles.
81  if ($contextDepth > 0) {
82  if (array_key_exists(CONTEXT_ID_NONE, $userRoles) &&
83  array_key_exists(ROLE_ID_SITE_ADMIN, $userRoles[CONTEXT_ID_NONE])) {
84  // site level role
85  $contextRoles[] = ROLE_ID_SITE_ADMIN;
86  }
87  if ($contextDepth == 2 &&
88  array_key_exists(CONTEXT_ID_NONE, $userRoles[$workingRoleContext[0]]) &&
89  array_key_exists(ROLE_ID_MANAGER, $userRoles[$workingRoleContext[0]][CONTEXT_ID_NONE])) {
90  // This is a main context managerial role (i.e. conference-level).
91  $contextRoles[] = ROLE_ID_MANAGER;
92  }
93  } else {
94  // Application has no context.
95  return $this->_prepareContextRolesArray($userRoles[CONTEXT_ID_NONE]);
96  }
97 
98  // Get the user roles related to the passed context.
99  for ($contextLevel = 1; $contextLevel <= $contextDepth; $contextLevel++) {
100  $contextId = $workingRoleContext[$contextLevel-1];
101  if ($contextId != CONTEXT_ID_NONE && isset($userRoles[$contextId])) {
102  // Filter the user roles to the found context id.
103  $userRoles = $userRoles[$contextId];
104 
105  // If we reached the context depth, search for the role id.
106  if ($contextLevel == $contextDepth) {
107  return $this->_prepareContextRolesArray($userRoles, $contextRoles);
108  }
109  } else {
110  // Context id not present in user roles array.
111  return $contextRoles;
112  }
113  }
114  }
115 
123  function _prepareContextRolesArray($userRoles, $contextRoles = array()) {
124  foreach ($userRoles as $role) {
125  $contextRoles[] = $role->getRoleId();
126  }
127  return $contextRoles;
128  }
129 }
130 
131 
UserRolesRequiredPolicy\_prepareContextRolesArray
_prepareContextRolesArray($userRoles, $contextRoles=array())
Definition: UserRolesRequiredPolicy.inc.php:126
UserRolesRequiredPolicy
Policy to build an authorized user roles object. Because we may have users with no roles,...
Definition: UserRolesRequiredPolicy.inc.php:18
$application
$application
Definition: index.php:61
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
UserRolesRequiredPolicy\$_request
$_request
Definition: UserRolesRequiredPolicy.inc.php:23
AuthorizationPolicy\addAuthorizedContextObject
addAuthorizedContextObject($assocType, &$authorizedObject)
Definition: AuthorizationPolicy.inc.php:97
UserRolesRequiredPolicy\_getContextRoles
_getContextRoles($roleContext, $contextDepth, $userRoles)
Definition: UserRolesRequiredPolicy.inc.php:77
UserRolesRequiredPolicy\__construct
__construct($request)
Definition: UserRolesRequiredPolicy.inc.php:30
AuthorizationPolicy
Class to represent an authorization policy.
Definition: AuthorizationPolicy.inc.php:31
UserRolesRequiredPolicy\effect
effect()
Definition: UserRolesRequiredPolicy.inc.php:42
PKPApplication\get
static get()
Definition: PKPApplication.inc.php:235