更新Symfony2中的安全标识(ACL)

时间:2015-01-06 13:25:14

标签: php security symfony acl

我正在使用FOSUserBundle来处理我的应用用户。用户可以更新其用户名,也可以由管理员删除。一切都被罚款,我的问题与Symfony ACL有关。

每个用户在创建时都有自己的安全实体。例如,如果我使用 shigeno 用户名创建帐户,则会在数据库中生成类似的内容( acl_security_identities 表):

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

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

现在,我, shigeno ,将我的用户名更改为 honda Acl_security_identities 表保持不变,因此删除了我的所有权限(或者更确切地说,他们没有随我移动)。

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

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

    注意:我见过this similar subject。它没有回答更新问题,而且,在这种情况下执行原始SQL请求是非常不安全的(是的,它也很丑陋)。

1 个答案:

答案 0 :(得分:1)

关注此链接:

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

您必须编写一个Listener,它会更新preUpdate事件的acl。这是上面提交的描述。

格雷茨兹:)