2016-08-29 13 views
1

新しいリソースを現在のユーザーに自動的に割り当てる(ログインしていることを確認する)ことができるように、また現在のユーザーが現在のユーザーユーザーはリソースを所有していますか?現在のユーザーのデフォルト所有権を持つ新しいリソース

これは設定によって可能ですか、コントローラの各動作を無効にする必要がありますか?

はもともとここに掲載 - https://github.com/Sylius/Sylius/issues/5907

答えて

2

要約すると:

あなたは2つのケースがあると理解していました。 まず、所有リソースを作成します。 ベスト・アプローチは、現在ログインしているユーザーを判別するためにUserContextを注入するデフォルトのリソース・ファクトリーをデコレートすることです。または、ファクトリメソッドに2番目の引数として渡します。

もう1つはリソースを更新することです。所有者だけにリソースの編集を許可したいのですか?いくつかのリポジトリメソッドは、リソースIDだけでなく、現在のユーザーも受け取ってジョブを実行します。次に、findByIdAndCustomerメソッドがあるので、許可されたユーザーだけが編集ページにアクセスできます。それ以外の場合は、エラーが表示されます。これは404だと思います。

これが望ましい場合は、2つのオーバーライドされたリソース(カスタムファクトリとリポジトリ)になり、ルーティングを定義するときにyamlでrestを処理する必要があります。コントローラーを変更する必要はありません。両方のアプローチの

いくつかの比較:

  1. リスナーとそれを解決することは、おそらく速く(一つだけのクラスが必要)と容易になるだろう。
  2. イベントリスナーで管理する場合、ルーティングの変更は必要ありません。
  3. ファクトリをオーバーライドすると、このオブジェクトは常に指定のユーザーで作成されます。イベントは作成後、データベースに永続化される前に送出されます。
  4. カスタムリポジトリメソッドを使用すると、編集ページをオーナーでなくても表示できなくなります。

どちらも正しいです。 IMHOは最初に速く、2つ目はよりクリーンです。あなたが必要とするものを決めるだけ

2

をあなたはそのためのコントローラによってトリガされるイベントを使用することができます。ここをクリックしてください:http://docs.sylius.org/en/latest/bundles/general/events.html

リスナーでは、ユーザがログインしているかどうかを確認するためのsecurity.contextサービスを注入する必要があります。

編集:@Łukaszさんの答えをご覧ください。これには、より洗練された代替方法が含まれています。 ;)

0

Pawełもイベントを勧めていますが、私も最初ですが、Łukaszは工場やレポジトリのオーバーライドを提案していました。

私はそれらの両方が正しいとオリジナルのポスターが彼の目標を達成するのを助けるが、私は両方の背後にある議論が何か疑問に思います。

このコメントの唯一の目的は、これら2つのソリューションの議論です。

関連する問題