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(1、2 ...などのID値)を手動で変更することにより、他のユーザーに属するプロパティを編集できます。編集アクションの場合、上記のクエリはまったく呼び出されません。その動作を変更するにはどうすればよいですか?

2.コントローラーにクエリを配置する代わりに、PropertyRepositoryクラスからクエリをフェッチできますか?これにより、単体テストを記述できるモデルのロジックが維持されます。

3.試しています:ProductAdmin extends AdminHelper {....} AdminHelper extends 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)編集アクションを再定義し、ユーザーが自分に属するプロパティを編集しようとしていることを確認します。これは、ページ管理コントローラーに似ています。作成アクションが再定義されます。

2)コントローラーで$ this-> getConfigurationPool()-> getContainer()-> get('doctrine')-> getRepository($ this-> getClass()); このモデルに登録されているリポジトリにアクセスできます。おそらく、そこからサービスコンテナとエンティティマネージャを取得する方法は他にいくつかあります。

3)adminクラスを作成するには、Sonata Adminを拡張する必要があります:このためのドキュメント、この問題は私にとってはsonataに関連していないようです。D:_development \ rent2 \ app / config \routing.ymlのコンテンツを提供していただけますか?

于 2012-07-13T21:41:47.387 に答える