0

在我们的项目中,我们使用 symfony 2 ACL 系统来控制对存储在数据库(Postgresql)中的实体的访问。

一切正常,直到我们想要检查大量对象(几百个)的权限。然后性能越来越差。在某些页面上,对数据库的查询数超过 4000。这个数字实际上与我们数据库中的实体数直接相关。它增长得越多,需要在此页面上完成的查询就越多。

有没有办法在保持下降性能的同时检查用户对许多对象的授权(保持对数据库的查询数量较低)?

4

1 回答 1

0

有办法实际加载与一个或多个不同实体相关的 acl 数据。系统会尝试在少量查询中将它们全部加载,然后将数据保留在周围,以便可以重复使用它们而无需再次访问数据库。

private function loadBlogPostsAcls($blogPostRepository)
{
    $oids = array();
    foreach ($blogPostRepository->findBy(array(), array('date' => 'asc')) as $blogPost) {
        $oids[] = ObjectIdentity::fromDomainObject($blogPost);
    }

    $this->aclProvider->findAcls($oids);
}
于 2013-10-10T12:50:08.893 回答