【问题标题】:Sonata admin bundle, how to use entity repository classesSonata 管理包,如何使用实体存储库类
【发布时间】:2012-07-05 00:51:54
【问题描述】:
  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 仍然读取它。有什么解决办法吗?

【问题讨论】:

    标签: symfony symfony-sonata


    【解决方案1】:

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

    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 的内容?

    【讨论】:

    • 1.好的,我将谷歌如何使用权限检查 2. 我通过分析 Admin 类解决了这个问题。它具有我在子类中继承的 getObject($id) 方法并解决了该问题。 3.由于许多其他问题,我重新安装了所有东西,现在它可以工作了。老实说,我不知道怎么做,但我会保留它:)
    • 第 2 点。真的帮帮我:D
    猜你喜欢
    • 2021-04-27
    • 2013-03-25
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    • 2012-08-27
    • 2012-09-24
    相关资源
    最近更新 更多