Doctrine orm zf2 acl条令2

Doctrine orm zf2 acl条令2,doctrine-orm,zend-framework2,acl,Doctrine Orm,Zend Framework2,Acl,实际上,使用Zend Framework 2,我正在寻找一种基于数据库实现性能ACL策略的方法 整个想法是根据当前登录的用户及其权限直接过滤DQL查询 我在Symfony 2中发现了这个mecanisme的一个实现,在这个例子中,如果每个用户都有权访问一行,那么每个用户似乎都会存储一个表,因此我们可以通过加入这个表来轻松地动态加载只允许的行 为了综合,我正在寻找一种基于标准定义实体访问规则的方法,但希望能够在单个查询中获得结果,以便能够进行排序和分页 是否有任何ZF2模块可以解决此问题 似乎将S

实际上,使用Zend Framework 2,我正在寻找一种基于数据库实现性能ACL策略的方法

整个想法是根据当前登录的用户及其权限直接过滤DQL查询

我在Symfony 2中发现了这个mecanisme的一个实现,在这个例子中,如果每个用户都有权访问一行,那么每个用户似乎都会存储一个表,因此我们可以通过加入这个表来轻松地动态加载只允许的行

为了综合,我正在寻找一种基于标准定义实体访问规则的方法,但希望能够在单个查询中获得结果,以便能够进行排序和分页

是否有任何ZF2模块可以解决此问题


似乎将SF2安全组件集成为独立组件不是一个选项:

您必须使用条令过滤器为当前成员加载内容

我的代码为成员查询添加筛选器的示例:

$em = $sm->get('doctrine.entitymanager.orm_default');


$ormconfig = $sm->get('doctrine.configuration.orm_default');


$ormconfig->addFilter("member", "\PatrickCore\Script\ORM\Functional\MemberAccessFilter");


//

$currentUser = $membersService->getCurrentUser();

$uid = $currentUser->getId();
$filter = $em->getFilters()->enable("member");
$filter->setParameter('member', $uid);
此文件\PatrickCore\Script\ORM\Functional\MemberAccessFilter

<?php
namespace PatrickCore\Script\ORM\Functional;
use Doctrine\ORM\Mapping\ClassMetaData,
    Doctrine\ORM\Query\Filter\SQLFilter;

class MemberAccessFilter extends SQLFilter
{
    public function addFilterConstraint(ClassMetadata $targetEntity, $targetTableAlias)
    {
        // Check if the entity implements the LocalAware interface

        if (!$targetEntity->reflClass->implementsInterface('\PatrickCore\Entity\MemberAccessAware')) {
            return "";
        }

        return $targetTableAlias.'.member_id = ' . $this->getParameter('member'); // getParameter applies quoting automatically
    }
}

谢谢你的回答。今天我意识到我的问题更多的是找到一种存储行级访问的好方法,这样我就可以内部连接到过滤器