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

0

Я использую 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. Но:

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

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

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

Теги:
security
acl

1 ответ

1
Лучший ответ

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

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

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

Greetzzz :)

  • 0
    Именно то, что мне было нужно. Благодарю. Позор, это не зарегистрировано.
  • 0
    Сейчас он находится в документации: symfony.com/doc/current/cookbook/security/acl_advanced.html

Ещё вопросы

Сообщество Overcoder
Наверх
Меню