diff --git a/core/lib/Drupal/Core/Access/AccessManager.php b/core/lib/Drupal/Core/Access/AccessManager.php index 181955a..879ddb9 100644 --- a/core/lib/Drupal/Core/Access/AccessManager.php +++ b/core/lib/Drupal/Core/Access/AccessManager.php @@ -14,6 +14,8 @@ /** * Attaches access check services to routes and runs them on request. + * + * @see \Drupal\Tests\Core\Access\AccessManagerTest */ class AccessManager extends ContainerAware { @@ -101,7 +103,7 @@ protected function applies(Route $route) { public function check(Route $route, Request $request) { $checks = $route->getOption('_access_checks') ?: array(); - $conjunction = $route->getRequirement('_access_conjunction') ?: 'AND'; + $conjunction = $route->getOption('_access_conjunction') ?: 'AND'; if ($conjunction == 'AND') { return $this->checkAnd($checks, $route, $request); @@ -169,8 +171,7 @@ protected function checkOr(array $checks, $route, $request) { $service_access = $this->checks[$service_id]->access($route, $request); if ($service_access === TRUE) { - $access = TRUE; - break; + return TRUE; } if ($service_access === FALSE) { $access = FALSE; diff --git a/core/tests/Drupal/Tests/Core/Access/AccessManagerTest.php b/core/tests/Drupal/Tests/Core/Access/AccessManagerTest.php index 5c5d53f..9ee2852 100644 --- a/core/tests/Drupal/Tests/Core/Access/AccessManagerTest.php +++ b/core/tests/Drupal/Tests/Core/Access/AccessManagerTest.php @@ -134,40 +134,37 @@ public function testCheckConjunctions() { $this->routeCollection->add('test_route_5', new Route('/test-route-5', array(), array( '_access' => 'TRUE', '_test_access' => 'TRUE', - '_access_conjunction' => 'OR', - ))); + )), array('_access_conjunction' => 'OR')); $this->routeCollection->add('test_route_6', new Route('/test-route-6', array(), array( '_access' => 'TRUE', '_test_access' => 'TRUE', - '_access_conjunction' => 'AND', - ))); + )), array('_access_conjunction' => 'AND')); $this->routeCollection->add('test_route_7', new Route('/test-route-7', array(), array( '_access' => 'FALSE', '_test_access' => 'TRUE', - '_access_conjunction' => 'OR', - ))); + )), array('_access_conjunction' => 'OR')); + $this->routeCollection->add('test_route_8', new Route('/test-route-8', array(), array( '_access' => 'FALSE', '_test_access' => 'TRUE', - '_access_conjunction' => 'AND', - ))); + )), array('_access_conjunction' => 'AND')); + $this->routeCollection->add('test_route_9', new Route('/test-route-9', array(), array( '_access' => 'NULL', '_test_access' => 'TRUE', - '_access_conjunction' => 'AND', - ))); + )), array('_access_conjunction' => 'AND')); + $this->routeCollection->add('test_route_10', new Route('/test-route-10', array(), array( '_access' => 'NULL', '_test_access' => 'TRUE', - '_access_conjunction' => 'OR', - ))); + )), array('_access_conjunction' => 'OR')); + $this->routeCollection->add('test_route_11', new Route('/test-route-11', array(), array( '_access' => 'NULL', '_test_access' => 'FALSE', - '_access_conjunction' => 'OR', - ))); + )), array('_access_conjunction' => 'OR')); $this->accessManager->setChecks($this->routeCollection);