在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;
}
我能够限制" list"结果给那些"属于"记录管理员即。仅记录管理员创建的属性(即实体)。
问题: 通过手动更改URL(id值如1,2 ......),我可以编辑属于其他用户的Property。对于编辑操作,根本不调用上面的查询。如何改变这种行为?
2.不是在控制器中放置查询,我可以从PropertyRepository类中获取它吗?这将保留模型的逻辑,我可以编写单元测试。
3.我正在尝试: ProductAdmin扩展了AdminHelper {....} AdminHelper扩展了Admin {....}
但它没有说"无法导入资源" D:_development \ rent2 \ app / config。"来自" D:_development \ rent2 \ app / config \ routing.yml"。
AdminHelper是抽象类,但Sonata仍在阅读它。任何解决方案?
答案 0 :(得分:9)
1.a)对对象使用ACL,CRUD controller有权限检查。
1.b)重新定义编辑操作,确保用户尝试编辑属于他的属性,类似于Page Admin Controller,重新定义创建操作
2)在控制器$ this-> getConfigurationPool() - > getContainer() - > get('doctrine') - > getRepository($ this-> getClass());允许您访问为此模型注册的存储库。可能很少有其他方法可以从中获取服务容器和实体管理器。
3)要创建管理类,您应该扩展Sonata管理员:docs for this,这个问题似乎与奏鸣曲无关。你能否为D:_development \ rent2 \ app / config \ routing.yml?
提供内容