在configureFormFields中使用SonataAdminBundle ACL

Mic*_*ael 8 symfony sonata-admin sonata

我在SonataAdminBundle中使用ACL时安装了SonataAdminBundle,SonataUserBundle和FOSUserBundle以及CoopTilleulsAclSonataAdminExtensionBundle.

所有者过滤列表,一切都很好.顾客A只能看到他的物品,顾客b也只能看到他的物品.但是,如果我要创建一个新对象,我也可以看到其他客户的项目.

让我们说客户可以创建用于分配产品的组.这是在将产品创建为下拉列表(产品视图中的多对一关系)时完成的.但我也可以看到由其他客户创建的群组.

我怎么过滤这个?我想我必须在ProductsAdmin.php中进行任何过滤.或者它必须发生在ProductsRepository.php中吗?到目前为止,我在文档中找不到任何提示,并且会在任何类型的提示或链接中找到我可以找到的信息.

小智 0

您需要覆盖编辑树枝模板或创建自定义选择框。请参阅有关覆盖的问题。我不知道你的实体结构,但过程应该是这样的

{% for object in objects %}
 {% if owned by this user flag display %}
  {{object}}
 {% endif %}
{% endfor%}
Run Code Online (Sandbox Code Playgroud)

管理类中的自定义选择查询,例如

    $em = $this->getConfigurationPool()->getContainer()->get('doctrine.orm.entity_manager');
    $user = $this->getConfigurationPool()->getContainer()->get('security.token_storage')->getToken()->getUser();
    $query = $em->createQueryBuilder('p')
        ->select('p')
        ->from('MyBundle:Product', 'p')
        ->where('p.user = :user')
        ->setParameter('user', $user);

    $formMapper
            ...
            ->add('categoria', 'sonata_type_model', array(
    'required' => true,
    'query' => $query
))
Run Code Online (Sandbox Code Playgroud)