在configureFormFields中使用SonataAdminBundle ACL

时间:2016-10-07 08:19:06

标签: symfony sonata-admin sonata

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

if(!($sql = $link->prepare("INSERT into `USER` SET 
                                    `username`  = ?, 
                                    `password`  = ?, 
                                    `email`     = ?, 
                                    `salt`      = ?, 
                                    `iteration` = ?, 
                                    `method`    = ?, 
                                    `person_id` = ?, 
                                    `role_id`   = ?, 
                                    `skin_id`   = ?"))){
                                        echo "SQL Query Preparation has failed";
                                    }

                    if(!($sql->bind_param("ssssisiii", $user, $phsh, $email, $new_salt, $new_iteration, $new_method, $result2, $result4, $result5))){
                        echo "Parameter Binding failed";
                    }

                    if(!($sql->execute())){
                        echo "MySQL Query Execution has failed";
                    }

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

{% for object in objects %}
 {% if owned by this user flag display %}
  {{object}}
 {% endif %}
{% endfor%}