2
  1. 在 PropertyAdmin 中使用此代码扩展了 Admin :

    public function createQuery($context = 'list')
    {   
    $user = $this->getConfigurationPool()->getContainer()->get('security.context')->getToken()->getUser();
    $query = $this->getModelManager()->createQuery($this->getClass(), 'o');
    $query->where('o.Creator=:creator')->setParameter("creator", $user);
    return $query;
    }
    

我能够将“列表”结果限制为“属于”登录管理员的人,即。仅由登录管理员创建的属性(即实体)。

问题:通过手动更改 URL(id 值如 1、2...),我可以编辑属于其他用户的属性。对于编辑操作,根本不调用上述查询。如何改变这种行为?

2.我可以从PropertyRepository 类中获取它而不是将查询放入控制器中吗?这将使我可以为其编写单元测试的模型中保留逻辑。

3.我正在尝试: ProductAdmin 扩展 AdminHelper {....} AdminHelper 扩展 Admin { .... }

但它没有说“无法从“D:_development\rent2\app/config\routing.yml”导入资源“D:_development\rent2\app/config.”。

AdminHelper 是抽象类,但 Sonata 仍然会读取它。有什么解决办法吗?

4

1 回答 1

9

1.a) 为您的对象使用 ACL,CRUD 控制器具有权限检查。

1.b)重新定义编辑操作,确保用户尝试编辑属于他的属性,类似于Page Admin Controller,重新定义创建操作

2) 在控制器 $this->getConfigurationPool()->getContainer()->get('doctrine')->getRepository($this->getClass()); 使您可以访问为此模型注册的存储库。可能几乎没有其他方法可以从中获取服务容器和实体管理器。

3)要创建您的管理类,您应该扩展 Sonata Admin: docs for this,这个问题似乎与我的奏鸣曲无关。您能否提供 D:_development\rent2\app/config\routing.yml 的内容?

于 2012-07-13T21:41:47.387 回答