diff --git a/core/modules/aggregator/aggregator.module b/core/modules/aggregator/aggregator.module index e1bbaca..076a21b 100644 --- a/core/modules/aggregator/aggregator.module +++ b/core/modules/aggregator/aggregator.module @@ -265,17 +265,6 @@ function _aggregator_category_title($category) { } /** - * Access callback: Determines whether there are any aggregator categories. - * - * @return - * TRUE if there is at least one category and the user has access to them; - * FALSE otherwise. - */ -function _aggregator_has_categories() { - return user_access('access news feeds') && (bool) db_query_range('SELECT 1 FROM {aggregator_category}', 0, 1)->fetchField(); -} - -/** * Implements hook_permission(). */ function aggregator_permission() { diff --git a/core/modules/aggregator/aggregator.routing.yml b/core/modules/aggregator/aggregator.routing.yml index d756689..bb86063 100644 --- a/core/modules/aggregator/aggregator.routing.yml +++ b/core/modules/aggregator/aggregator.routing.yml @@ -31,4 +31,4 @@ aggregator_categories: defaults: _controller: '\Drupal\aggregator\Routing\AggregatorController::categories' requirements: - _permission: 'access news feeds' + _access_aggregator_categories: 'TRUE' diff --git a/core/modules/aggregator/aggregator.services.yml b/core/modules/aggregator/aggregator.services.yml index 639ed2d..cf74241 100644 --- a/core/modules/aggregator/aggregator.services.yml +++ b/core/modules/aggregator/aggregator.services.yml @@ -8,3 +8,8 @@ services: plugin.manager.aggregator.processor: class: Drupal\aggregator\Plugin\AggregatorPluginManager arguments: [processor, '@container.namespaces'] + access_check.aggregator.categories: + class: Drupal\aggregator\Access\CategoriesAccessCheck + arguments: ['@database'] + tags: + - { name: access_check } diff --git a/core/modules/aggregator/lib/Drupal/aggregator/Access/CategoriesAccessCheck.php b/core/modules/aggregator/lib/Drupal/aggregator/Access/CategoriesAccessCheck.php new file mode 100644 index 0000000..9d94e94 --- /dev/null +++ b/core/modules/aggregator/lib/Drupal/aggregator/Access/CategoriesAccessCheck.php @@ -0,0 +1,50 @@ +database = $database; + } + + /** + * {@inheritdoc} + */ + public function applies(Route $route) { + return array_key_exists('_access_aggregator_categories', $route->getRequirements()); + } + + /** + * {@inheritdoc} + */ + public function access(Route $route, Request $request) { + // @todo Replace user_access() with a correctly injected and session-using + // alternative. + return user_access('access news feeds') && (bool) $this->database->queryRange('SELECT 1 FROM {aggregator_category}', 0, 1)->fetchField(); + } + +}