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の教科書・プレゼント】

Junko
Laravelの使い方を覚えたい!と思ったら、ぜひ、役立ててほしいです。 基礎編は無料でプレゼント中です♪
ひつじプログラマ
会員制サイトをいちから作っていくよ。ボタンをクリックして詳細を見てね。
Laravelの教科書の詳細を見る

Laravel8版と、最新のLaravel9版、ふたつのテキストご用意してます♪

【無料プレゼント】

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

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

詳細はこちらをクリック

Laravel8版と、最新のLaravel9版、ふたつのテキストご用意してます♪

社内にWebアプリ開発経験がなくて、困ってませんか?

「自社でWebアプリ開発を始めていきたい」
という企業様のために、Laravelセミナー・プログラミング教育を実施しています。

【セミナー使用スライド】

詳細はこちらご覧ください

Twitter始めました。
40代からプログラミング!

コメント

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