Рейтинг:0

Как предоставить роли разрешение на очистку кеша?

флаг us

я удалил Администрирование конфигурации сайта разрешение от роли, но мне нужно, чтобы пользователи с этой ролью очищали кеш из /admin/config/development/performance.

я знаю, есть hook_menu_alter() в Drupal 7, а как насчет Drupal 8?

leymannx avatar
флаг ne
Отвечает ли это на ваш вопрос? [Как дать роли «редактор» разрешение на перестройку/очистку кеша?](https://drupal.stackexchange.com/questions/234270/how-to-give-an-editor-role-rebuild-clear-cache-permission )
Рейтинг:1
флаг us

Вы можете изменить разрешение, используемое для доступа к маршруту, как описано в Изменение существующих маршрутов и добавление новых маршрутов на основе динамических. В конкретном случае код, используемый в 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()), когда пользователь подтвердит операцию.

ANDREW-LVIV avatar
флаг us
Спасибо! Работает как шарм.
leymannx avatar
флаг ne
Это был бы отличный ответ для https://drupal.stackexchange.com/questions/234270/how-to-give-an-editor-role-rebuild-clear-cache-permission.
apaderno avatar
флаг us
@leymannx Я должен расширить ответ, чтобы показать больше кода, чем он есть, включая код для использования во втором сценарии.
ANDREW-LVIV avatar
флаг us
Текущее предложение - это именно то, что я искал.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.