Рейтинг:1

Ограничить видимость пунктов меню разрешениями

флаг in

У меня есть меню, сгенерированное модулем (с использованием файла yaml) с 5 пунктами меню.Мои требования не позволяют мне ограничивать видимость элементов меню по ролям, поскольку роли могут добавляться динамически. Поэтому я должен сделать это, используя только разрешения.

Что я пробовал
(1) Ограничение доступа к элементам меню с использованием разрешений маршрута — это показывает запрещенную страницу, но все же позволяет отображать ограниченный элемент меню.

Пожалуйста, смотрите мои фактические файлы ниже:

portal_hrm_core.links.menu.yml

portal_hrm_core.hrm_link:
  title: 'Менеджер по персоналу'
  имя_маршрута: portal_hrm_core.hrm_link
  имя_меню: hcm
  развернуто: ИСТИНА

port_hrm_core.routing.yml

портал_hrm_core. hrm_ссылка:
путь: '/admin/hrm' 
значения по умолчанию:
  _controller: '\Drupal... systemAdminMenuBlockPage'
  _title: 'Управление персоналом'
требования:
  _permission: 'доступ к hrm_core_job+access_hrm_core_employee'

(2) Вкладные модули - Видимость пункта меню и Пункт меню на роль Оба они основаны только на ролях и не могут поддерживать разрешения.

Я знаю, что могу перейти на очень низкий уровень и использовать что-то вроде hook_preprocess_menu но кажется тяжелым для такого простого требования, учитывая, сколько раз этот хук может быть вызван.

Итак, люди, пожалуйста, какие-либо дальнейшие предложения?

Спасибо

флаг ru
Пункт AFAIK (1) верен и также должен скрывать элементы меню (используя этот метод в моих собственных проектах). Меню сильно кешируются, вы очищали кеш после добавления разрешений маршрута?
ilechcod avatar
флаг in
Худри - твой быстрый ответ сильно меня ободрил! Спасибо. Пожалуйста, я обновил исходный вопрос своими исходными файлами для вашего обзора. И я очистил кеш, используя как ``devel menu ui```, так и ```drush cr```. Тем не менее, этот пункт меню остается видимым независимо от разрешений, и я не вошел в систему как администратор.
флаг ru
Это почти то же самое, что и я, просто у меня нет ключа `expanded: true` в моих файлах, я не знаю этого ключа. У меня также есть дополнительные `options: _admin_route: TRUE` в моих файлах `routing.yml`, потому что мне это нужно только для страниц с темой администратора.
Рейтинг:0
флаг in

Работает сейчас. Спасибо, Худри, за то, что указал мне правильное направление. Я перепроверил ваше предложение по очистке кеша. В процессе я обнаружил, что следующая строка была закомментирована в моем ленивыйстроитель() метод (эти пункты меню находятся на моей панели инструментов и генерируются в коде)

$манипуляторы = [
  ['callable' => 'menu.default_tree_manipulators:checkAccess']
]

Очевидно, отсутствие этих строк заставляло мое меню игнорировать проверки доступа. Раскомментирование их решило проблему. Спасибо.

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

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