Symfony4で受注一覧をログインユーザーのみに絞り込み可能な受注APIを作る方法

前回の記事でSymfony4でユーザーを認証・管理するAPIを作りました。

今回は受注データ登録・更新・削除から受注一覧をログインユーザーのみに絞り込める受注APIを作成する方法を調べたのでその備忘録です。

追記:ログインユーザーはログインカスタマー、受注は注文に読み替えて下さい。

カスタムアノテーションを作成

以下のように受注一覧をログインユーザーのみに絞り込むためのアノテーションを作成して下さい。

受注エンティティにUserAwareアノテーションを追加

以下のようなAPIに対応した受注エンティティがあるとします。

このエンティティに上記で作成したUserAwareアノテーションを追加して下さい。

userFieldNameはorders.user_idカラムを指定しています。

指定したユーザーで受注一覧を絞り込むためのDoctrineフィルターを作成

ApiResourceアノテーションのitemOperationsで受注の取得、更新、削除の権限指定は設定できるのですが、受注一覧を特定ユーザーで絞り込むことが出来ないのでDoctrineのフィルターを使って絞り込みます。

以下のように、エンティティにUserAwareアノテーションが設定され、そのエンティティがUserエンティティとリレーションしている場合に指定したユーザーで絞り込むためのDoctrinのフィルターを作成します。

Doctrineフィルターの登録

api_platform.yamlに上記で作成したDoctrineフィルターを登録して下さい。

リクエスト毎にDoctrineフィルターを初期化するイベントを作成

ユーザーがログインしていた場合、リクエスト毎に上記で作成したDoctrineフィルターのUserFilterを初期化するイベントを作成します。

受注登録時にユーザーIDを保存するイベントを追加

受注登録時にログインユーザーのユーザーIDを保存するイベントを追加します。

以上で完成です。

APIの使い方

以下のAPIの使い方は、前回の記事を参考に認証処理を実装していることを前提としています。

ログイン

認証に成功すると以下のようなトークンが返ってきます。このトークを使って受注データを操作します。

受注データ登録

受注一覧データ取得

受注データ更新

受注データ削除

 

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください