Я использую FOSUserBundle для работы с пользователями моего приложения. Пользователи могут обновлять свои имена пользователей или могут быть удалены администратором. На этой части все оштрафовано, моя проблема связана с Symfony ACL.
Каждый пользователь имеет свой собственный объект безопасности при создании. Например, если я создаю учетную запись с shigeno имя пользователя, это приводит к чему-то вроде этого в базе данных (acl_security_identities Таблица):
id | identifier | username
... | ... | ...
23 | my\Bundle\Entity\User-shigeno | 1
(Идентификатор ACL использует имя пользователя! Ой … Почему не идентификатор?)
Сейчас я, shigeno, изменить мое имя пользователя на Хонда. Acl_security_identities таблица остается как есть, поэтому все мое разрешение удаляются (или, точнее, они не переехали со мной).
Конечно, я могу добавить новые ACL. Но:
Как я могу обновить (и удалить, если удаляю пользователя) идентификатор безопасности ACL?
Примечание: я видел эта похожая тема. Он не ответил на вопрос об обновлении, более того, выполнение необработанного SQL-запроса в этом контексте крайне небезопасно (и да, это тоже ужасно).
Перейдите по этой ссылке:
https://github.com/symfony/symfony/commit/8d39213f4cca19466f84a5656a199eee98602ab1
Вы должны написать Listner, который обновляет acl на событии preUpdate. Это было описано выше.
Привет 🙂
Других решений пока нет …