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