Skip to content

fix(acl): align top-menu permissions, parents, and dead keys - #3

Open
Ibochkarev wants to merge 3 commits into
3.xfrom
fix/issue-14498-top-menu-access-policy
Open

fix(acl): align top-menu permissions, parents, and dead keys#3
Ibochkarev wants to merge 3 commits into
3.xfrom
fix/issue-14498-top-menu-access-policy

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Что сделано

Строки меню, контроллеры и процессоры использовали разные ключи Access Policy для одних и тех же экранов. Родительские папки тоже переиспользовали ключи дочерних страниц, поэтому запрет System Settings прятал всё меню Gear.

Этот PR:

  • Выравнивает меню и страницу Error Log на error_log_view (убирает view_eventlog).
  • Выравнивает меню Gear → Menus и system/action на menus (убирает actions).
  • Убирает неиспользуемый ключ logout (контроллер/процессор logout и так разрешают выход).
  • Даёт родителям собственные ключи:
    • Media → menu_media (browser остаётся file_manager).
    • Access → menu_access (ACL / Resource Groups / Flush Permissions остаются access_permissions).
    • Gear → menu_system (System Settings остаётся settings).
  • Удаляет мёртвые ключи из AdministratorTemplate и базовых политик: about, credits, export_static, menu_security, menu_support, menu_tools.
  • Обновляет английские описания лексикона для новой карты (mgr_log_view, родительские ключи, settings / file_manager / access_permissions).

Скрипт апгрейда setup/includes/upgrades/common/3.3.0-top-menu-access-policy.php (подключён из mysql/3.3.0-pl.php):

  • Перезаписывает перечисленные строки меню, включая разделённые запятыми токены разрешений.
  • Выдаёт menu_media / menu_access / menu_system, если присутствовал старый общий ключ (сохраняет видимость родителя).
  • Не делает OR-merge view_eventlogerror_log_view или actionsmenus (без прироста привилегий уровня страницы).
  • Чистит устаревшие ключи из JSON политик и удаляет соответствующие строки modAccessPermission.
  • Гарантирует наличие menu_media и menu_access на AdministratorTemplate.

Намеренно не тронуто: menu_site, components, menu_trash (уже родитель-специфичные / живые). Без переименований menu_content / menu_packages / trash_view из modxcms#16595.

Как проверить

  1. core/vendor/bin/phpunit -c _build/test/phpunit.xml --filter TopMenuAccessPolicyTest → exit 0 (13 тестов).
  2. php -l на затронутых PHP-файлах.
  3. После апгрейда или чистой установки:
    • Запретите error_log_view → меню Error Log и ?a=system/event оба недоступны.
    • Запретите menus → меню Menus, ?a=system/action и процессоры меню недоступны.
    • Запретите settings, оставьте menu_system → Gear виден, System Settings заблокирован.
    • Запретите file_manager, оставьте menu_media → Media виден, Browser заблокирован. Sources по-прежнему используют sources.
    • Запретите menu_access → родитель Access скрыт даже с view_user.
    • Пользователь без logout всё равно может выйти из менеджера.
  4. Кастомная политика только с view_eventlog или actions не получает error_log_view / menus.

Совместимость

Менеджер UI + английский лексикон. Без изменения коннекторов или API процессоров. Безопасно для 3.x patch.

Оригинал: modxcms#17012

Unify menu and page/processor keys for Error Log and Menus, drop the
non-enforced logout gate, and migrate existing installs without elevating
menu-only grants. Refs modxcms#14498.
Give Media, Access, and Gear parents menu_media / menu_access /
menu_system so they no longer share child page keys. Drop unused
about, credits, export_static, and stale menu_* keys from core
policies. Refs modxcms#14498.
Keep function declarations out of the upgrade runner so PSR-1
SideEffects passes. Refs modxcms#14498.
@Ibochkarev Ibochkarev changed the title fix(acl): выровнять разрешения верхнего меню, родительские ключи и мёртвые ключи fix(acl): align top-menu permissions, parents, and dead keys Aug 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant