Вы можете изменить разрешение, используемое для доступа к маршруту, как описано в Изменение существующих маршрутов и добавление новых маршрутов на основе динамических. В конкретном случае код, используемый в alterRoutes(RouteCollection $коллекция)
будет следующий.
Поскольку управлять производительностью сайта разрешение является настраиваемым, оно должно быть добавлено как новое разрешение модулем, реализующим класс подписчика маршрута, как описано в Как создать пользовательское разрешение на Drupal 8-9.
Для модуля, машинное имя которого моймодуль, код будет похож на следующий.
mymodule.permissions.yml
управлять производительностью сайта:
title: 'Управление производительностью сайта'
description: 'Доступ к странице настроек производительности сайта.'
ограничить доступ: правда
мой модуль.services.yml
Сервисы:
мой модуль.route_subscriber:
класс: Drupal\mymodule\Routing\RouteSubscriber
теги:
- {имя: event_subscriber}
src/Маршрутизация/RouteSubscriber.php
пространство имен Drupal\mymodule\Routing;
используйте Drupal\Core\Routing\RouteSubscriberBase;
используйте Symfony\Component\Routing\RouteCollection;
/**
* Слушает события динамического маршрута.
*/
класс RouteSubscriber расширяет RouteSubscriberBase {
/**
* {@inheritdoc}
*/
защищенная функция alterRoutes(RouteCollection $ collection) {
если ($ маршрут = $ коллекция-> получить ('system.performance_settings')) {
$route->setRequirement('_permission', 'управление производительностью сайта');
}
}
}
Если пользователи с этой ролью не должны получать доступ к настройкам на этой странице (Кэширование и Оптимизация пропускной способности), но иметь возможность очищать кеш, я бы реализовал собственный маршрут, который показывает форму подтверждения и очищает кеш (что означает вызов drupal_flush_all_caches()
), когда пользователь подтвердит операцию.