diff --git a/core/lib/Drupal/Core/Access/AccessManager.php b/core/lib/Drupal/Core/Access/AccessManager.php index 693d470..7c88963 100644 --- a/core/lib/Drupal/Core/Access/AccessManager.php +++ b/core/lib/Drupal/Core/Access/AccessManager.php @@ -89,9 +89,12 @@ protected function applies(Route $route) { * * @param \Symfony\Component\Routing\Route $route * The route to check access to. - * @param \Symfony\Commponent\HttpFoundation\Request $request + * @param \Symfony\Component\HttpFoundation\Request $request * The incoming request object. * + * @return bool + * Returns TRUE if the user has access to the route, else FALSE. + * * @throws \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException * If any access check denies access or none explicitly approve. */ @@ -99,36 +102,78 @@ public function check(Route $route, Request $request) { $checks = $route->getOption('_access_checks') ?: array(); $conjunction = $route->getRequirement('_access_conjunction') ?: 'AND'; - $access = $conjunction == 'AND' ? TRUE : FALSE; - - // No checks == deny by default. if ($conjunction == 'AND') { - // If there are no checks return FALSE. - if (!$checks) { - return FALSE; + $access = $this->checkAnd($checks, $route, $request); + } + else { + $access = $this->checkOr($checks, $route, $request); + } + + return $access; + } + + /** + * Checks access for and conjunction. + * + * @param array $checks + * Contains the list of checks on the route definition. + * @param \Symfony\Component\Routing\Route $route + * The route to check access to. + * @param \Symfony\Component\HttpFoundation\Request $request + * The incoming request object. + * + * @return bool + * Returns TRUE if the user has access to the route, else FALSE. + */ + protected function checkAnd(array $checks, Route $route, Request $request) { + $access = TRUE; + // If there are no checks return FALSE. + if (!$checks) { + return FALSE; + } + foreach ($checks as $service_id) { + if (empty($this->checks[$service_id])) { + $this->loadCheck($service_id); } - foreach ($checks as $service_id) { - if (empty($this->checks[$service_id])) { - $this->loadCheck($service_id); - } - - $service_access = $this->checks[$service_id]->access($route, $request); - if ($service_access === FALSE) { - return FALSE; - } + + $service_access = $this->checks[$service_id]->access($route, $request); + if ($service_access === FALSE) { + return FALSE; } } - else { - foreach ($checks as $service_id) { - if (empty($this->checks[$service_id])) { - $this->loadCheck($service_id); - } - - $service_access = $this->checks[$service_id]->access($route, $request); - if ($service_access === TRUE) { - return TRUE; - } + + return $access; + } + + /** + * Checks access for or conjunction. + * + * @param array $checks + * Contains the list of checks on the route definition. + * @param \Symfony\Component\Routing\Route $route + * The route to check access to. + * @param \Symfony\Component\HttpFoundation\Request $request + * The incoming request object. + * + * @return bool + * Returns TRUE if the user has access to the route, else FALSE. + */ + protected function checkOr(array $checks, $route, $request) { + // No checks == deny by default. + $access = FALSE; + + foreach ($checks as $service_id) { + if (empty($this->checks[$service_id])) { + $this->loadCheck($service_id); + } + + $service_access = $this->checks[$service_id]->access($route, $request); + if ($service_access === TRUE) { + return TRUE; + } + if ($service_access === FALSE) { + return FALSE; } } diff --git a/core/tests/Drupal/Tests/Core/Access/AccessManagerTest.php b/core/tests/Drupal/Tests/Core/Access/AccessManagerTest.php index f1f8c83..4cdcac2 100644 --- a/core/tests/Drupal/Tests/Core/Access/AccessManagerTest.php +++ b/core/tests/Drupal/Tests/Core/Access/AccessManagerTest.php @@ -156,12 +156,7 @@ public function testCheckConjunctions() { $expected['test_route_8'] = FALSE; foreach ($expected as $route_name => $expected_access) { - try{ $this->assertSame($this->accessManager->check($this->routeCollection->get($route_name), $request), $expected_access); - } - catch (\Exception $e) { - $foo = 123; - } } }