Laravel Policyでログインユーザーの投稿だけ表示する方法【初心者のLaravel講座】

Laravel 入門講座
スポンサーリンク

LaravelにはPolicyという機能があり、閲覧、編集・削除を行う権限を簡単に設定できます。

Policyを使って、各ユーザーの画面に、自分が投稿したものだけを表示する方法を解説していきます。

スポンサーリンク

Laravel Policyでログインユーザーの投稿だけ表示する方法

今回実施したいこと

  • ログインしたユーザーは、フォームから質問ができる
  • 投稿一覧画面には、ログインユーザーの質問 (Inquiry) のみ表示させる

手順は次のとおりです。

① ポリシーファイルを作成

php artisan make:policyでポリシーファイルを作ります。

php artisan make:policy ポリシー名 –model=モデル名

このとき、ポリシーの名前は、ポリシーをかけるモデル (Post) と同じ名前にしておきましょう。

同じ名前だと、Laravelがモデルとポリシーの関係を自動で見つけてくれるので手間いらず!

名前を変えると、App/AuthserviceProviderに登録しなきゃいけません。

② ポリシーファイルに記述する

app/Policies に新しくポリシーファイルができています。

今回は閲覧制限をかけるので、public function view に下記の一文を入力します。

キャプチャしたコードは次の通りです。

コードの意味
user id が inquiryテーブルの user_id と同じ場合のみ、表示をしてください。

③ bladeファイルに記述する

実際に閲覧制限をかけたい部分を次のコードで囲みます。

なお省略して、次のように書くこともできます。

foreachで記述した部分に閲覧制限をかけるには、@foreachの後にコードをいれましょう。

実際のコード例は次のとおり。

これで、ログインしたユーザーが投稿した質問のみ表示できるようになります。

作成したポリシーは他の場所でも使えます。

さいごに

policyは使いまわせるし、簡単なので好きです。

なおLaravelには他にもいろいろな制限のかけ方があります。

ミドルウェアを使った方法など、別記事で解説しているので、あわせて参考にしてください。

Laravel 入門講座 Laravelセキュリティ Laravel認証機能

【無料プレゼント】

「LaravelでWebアプリをいちから作れるようになりたい!」

そんなLaravel初心者のあなたへ【Laravelの教科書】基礎編プレゼント中!
会員制フォーラムサイトを学習しながら作れます。

詳細はこちらをクリック

【個別サポート実施中】

「本ブログに記載の方法を試してみたけれど、うまくいかない」「コードを見てほしい」という方のために、有償でメールサポートいたします。以下のボタンをクリックして相談フォームにアクセスして下さい。

詳しく見る

Twitter始めました。
スポンサーリンク
40代からプログラミング!

コメント

タイトルとURLをコピーしました