Skip to content

fix(security): Delete user — modAccess error - #86

Open
Ibochkarev wants to merge 3 commits into
3.xfrom
fix/11276-delete-user-modaccess-refactor
Open

fix(security): Delete user — modAccess error#86
Ibochkarev wants to merge 3 commits into
3.xfrom
fix/11276-delete-user-modaccess-refactor

Conversation

@Ibochkarev

@Ibochkarev Ibochkarev commented Aug 21, 2026

Copy link
Copy Markdown
Member

Что сделано

Удаление пользователя раньше заставляло xPDO каскадить через отношение Acls на modPrincipal, указывающее на абстрактный modAccess (без таблицы). Вы получали спам в логе вида Could not get table class or name for class: modAccess, хотя пользователь исчезал.

Этот PR убирает composite из схемы, затем удаляет конкретные строки ACL (access_context, access_menus, … плюс package ACL-классы из getDescendants(modAccess)) через removeCollection перед parent::remove(). Очистка использует class_key пользователя, поэтому производные тоже матчат. principal_targets не трогается: он только контролирует, какие ACL-классы грузят атрибуты, а не какие таблицы мы чистим.

modUserGroup::remove() делит тот же хелпер. Регрессионные тесты покрывают пользователя, группу и строки ACL вне суженного principal_targets.

Зачем нужно

Bulk delete в Security → Users выглядел нормально в UI, но лог ошибок заполнялся, а некоторые ACL-таблицы могли остаться неконсистентными. #11276 открыт с 2014 за это.

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

  1. Создайте пользователя, дайте ему context / menu (или другие) ACL-записи.
  2. Удалите пользователя (одиночно или bulk).
  3. Проверьте лог ошибок: нет ошибок таблицы modAccess.
  4. Подтвердите, что матчащие строки исчезли из конкретных mod_access_* таблиц.
  5. Опционально: удалите группу пользователей с context ACL так же.

Связанные

Refs modxcms#11276

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

Remove the invalid Acls composite on modPrincipal (modAccess has no
table). Clear concrete ACL rows via getDescendants + removeCollection
before parent::remove(), using class_key for user derivatives and
ignoring principal_targets (load-time setting, not cleanup registry).

Fixes modxcms#11276
User group ACL rows store MODX\Revolution\modUserGroup; late static
binding on driver instances returned mysql\modUserGroup and skipped
cleanup.
@Ibochkarev Ibochkarev changed the title fix(security): удаление пользователя — ошибка modAccess fix(security): Delete user — modAccess error 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