Обновите идентификатор безопасности (ACL) в Symfony2

Я использую FOSUserBundle для работы с пользователями моего приложения. Пользователи могут обновлять свои имена пользователей или могут быть удалены администратором. На этой части все оштрафовано, моя проблема связана с Symfony ACL.

Каждый пользователь имеет свой собственный объект безопасности при создании. Например, если я создаю учетную запись с shigeno имя пользователя, это приводит к чему-то вроде этого в базе данных (acl_security_identities Таблица):

id   | identifier                    | username
...  | ...                           | ...
23   | my\Bundle\Entity\User-shigeno | 1

(Идентификатор ACL использует имя пользователя! Ой … Почему не идентификатор?)

Сейчас я, shigeno, изменить мое имя пользователя на Хонда. Acl_security_identities таблица остается как есть, поэтому все мое разрешение удаляются (или, точнее, они не переехали со мной).

Конечно, я могу добавить новые ACL. Но:

  1. Это больно. Мне нужно заставить дублировать все предыдущие ACL, не говоря уже о том, что у меня нет простого доступа ко всем объектам безопасности при обновлении или удалении пользователя.
  2. Это большая дыра в безопасности, потому что если ничего не удаляет предыдущие ACL и новый гость выбрал имя пользователя shigeno… БАМ, это Рождество.

Как я могу обновить (и удалить, если удаляю пользователя) идентификатор безопасности ACL?

Примечание: я видел эта похожая тема. Он не ответил на вопрос об обновлении, более того, выполнение необработанного SQL-запроса в этом контексте крайне небезопасно (и да, это тоже ужасно).

0

Решение

Перейдите по этой ссылке:

https://github.com/symfony/symfony/commit/8d39213f4cca19466f84a5656a199eee98602ab1

Вы должны написать Listner, который обновляет acl на событии preUpdate. Это было описано выше.

Привет 🙂

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector