Symfony2 ACL缓存

时间:2013-07-17 17:25:17

标签: caching symfony acl

是否有任何关于如何在Symfony2中缓存ACL查询的示例或更好的文档。

我找到了以下内容:

http://api.symfony.com/2.0/Symfony/Component/Security/Acl/Domain/DoctrineAclCache.html

但我不知道如何在我的支票上应用此功能。

1 个答案:

答案 0 :(得分:1)

我设法缓存了ObjectIdentities。这有点帮助,但并不多。

在安全* .xml文件中进行了大量挖掘后,我对config.yml进行了以下修改:

  • 我已将缓存ID(服务ID)添加到ACL配置
  • 我启用了Doctrine结果缓存。

config.yml:

doctrine:
    orm:
        result_cache_driver:
            type: apc

security:
    acl:
        cache:
            id:     security.acl.cache.doctrine
            prefix: my_acl_prefix_

这只会启用ObjectIdentities的缓存,但是在调用Symfony\Component\Security\Acl\Dbal\AclProvider::getAncestorIds()时会发生很多其他查询。该方法直接执行SQL查询,并且不使用缓存。在2.2和2.3中,该方法中有一条评论说:

            // FIXME: skip ancestors which are cached

在不使用结果缓存方面,该类中的其他几个方法也是如此。

我想通过实现自己的AclProvider并注入实体管理器的结果缓存,您也可以缓存这些查询。