16 import(
'lib.pkp.classes.security.authorization.AuthorizationPolicy');
28 parent::__construct();
29 $this->_request = $request;
41 $user = $request->getUser();
43 if (!is_a($user,
'User')) {
44 return AUTHORIZATION_DENY;
49 $userRoles = $roleDao->getByUserIdGroupedByContext($user->getId());
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;
61 $contextRoles = $this->
_getContextRoles($roleContext, $contextDepth, $userRoles);
64 return AUTHORIZATION_PERMIT;
76 $workingRoleContext = $roleContext;
78 $contextRoles = array();
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])) {
85 $contextRoles[] = ROLE_ID_SITE_ADMIN;
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])) {
91 $contextRoles[] = ROLE_ID_MANAGER;
99 for ($contextLevel = 1; $contextLevel <= $contextDepth; $contextLevel++) {
100 $contextId = $workingRoleContext[$contextLevel-1];
101 if ($contextId != CONTEXT_ID_NONE && isset($userRoles[$contextId])) {
103 $userRoles = $userRoles[$contextId];
106 if ($contextLevel == $contextDepth) {
111 return $contextRoles;
124 foreach ($userRoles as $role) {
125 $contextRoles[] = $role->getRoleId();
127 return $contextRoles;