在 Symfony2 中更新安全身份 (ACL)

Update a security identity (ACL) in Symfony2

我正在使用 FOSUserBundle 来处理我的应用程序用户。用户可以更新他们的用户名或被管理员删除。那部分一切都很好,我的问题与 Symfony ACL 有关。

每个用户在创建时都有自己的安全实体。例如,如果我用 shigeno 用户名创建一个帐户,它会在数据库中产生类似这样的结果 (acl_security_identities table):

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

(ACL身份使用用户名!哎哟...为什么不用id?)

现在,我 shigeno,将我的用户名更改为 hondaAcl_security_identities table 保持原样,所以我的所有许可都被删除(或者更准确地说,他们没有随我移动)。

当然可以,我可以添加新的 ACL。但是:

  1. 很痛苦。我必须复制所有以前的 ACL,更不用说在更新或删除用户时我无法轻松访问所有安全对象。
  2. 这是一个很大的安全漏洞,因为如果没有删除以前的 ACL 并且新访客选择了用户名 shigeno...BAM,这是圣诞节。

如何更新(如果我删除了用户则删除)ACL 安全标识?

注:我看过this similar subject。它没有回答更新问题,此外,在此上下文中执行原始 SQL 请求是非常不安全的(是的,它也很丑陋)。

关注这个Link:

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

您必须编写一个侦听器,它会在 preUpdate 事件上更新 acl。这在上面的提交中进行了描述。

你好:)