Laravelで本人と管理者以外はプロフィールを更新できなくする方法

Laravelセキュリティ

Laravelの【Policy】機能を使って、本人と管理者以外、プロフィールを更新できなくする方法を解説します。

しっかりとアクセス制限をかけておかないと、不正なアクセスによってユーザーのプロフィールを書き替えられてしまう可能性があります。

Policyの設定方法をステップごとに解説していきますね。

Laravelで本人と管理者以外はプロフィールを更新できなくする方法

今回は、各ユーザーのプロフィール編集ページへの更新に制限をかけていきます。

プロフィール編集ページは、Userテーブルと連携しています。

Laravelでは色々な方法で制限をかけられますが、今回はPolicyを使っていきます。

Policyは、特定のモデルと結び付けて、制限をかけられる方法

Laravelのマニュアルには次のように書かれています。

ポリシーは特定のモデルやリソースに関する認可ロジックを系統立てるクラスです。

*引用元:Laravel8 認可

今回はUserモデルと結び付けていきたいので、ピッタリの機能です。

具体的な手順を5ステップに分けて解説していきますね。

  1. Policyファイルを作成する
  2. Policyファイルを編集する
  3. AuthServiceProviderに登録する
  4. コントローラーに制限をかける
  5. 管理者も編集可能にする

Policyファイルを作成する

まずは下記のコマンドでPolicyファイルを作成します。

コマンドの最後に、結びつけるモデル名をいれておきます。

名前の付け方は、【モデル名+Policy】としておきましょう。

今回はUserモデルに連携させるので、UserPolicyとします。

コマンドを実行すると、app/policiesの中に、ポリシーファイルが作成されます。

モデル名をつけてPolicyファイルを作ると、最初から7つのメソッドが入っています。

Policyファイルを編集する

app/policiesの中にUserPolicy.phpファイルができているので、開きます。

一番上に、use宣言を加えておきます。

public function updateに、下記のように書いておきましょう。

ちょっとわかりにくいのですが、updateの後には、引数が二つ入っています。

最初の引数【User $user】が、今ログインしているユーザー、2つ目の引数【User $model】は、プロフィールに掲載されたユーザーです。

両者が同一人物であれば、trueを返します。

AuthServiceProviderに登録する

作成したPolicyは、AuthServiceProviderに登録します。

app/ProvidersからAuthServiceProvider.phpファイルを開き、下記のように登録しておきましょう。

コントローラーに制限をかける

これで準備OKです。

プロフィールを編集する部分のコントローラーに、今作ったUserPolicyを適用させます。

一度テストしてみましょう

これで一度、テストしてみましょう。

次のようにプロフィール編集ページのルートを設定しているとします。

User部分にログインユーザー以外のIDをいれ、プロフィールページを開こうとしてみます。

403 THIS ACTION IS UNAUTHORIZEDと表示されたら成功。

Policyをリソースコントローラーと効率的に連携させる方法

ここで、ちょっと豆知識。

コントローラーに、メソッドごとに  $this->authorize('メソッド', $user);と入れていくのは面倒です。

実はリソースコントローラーを使う場合、最初にコンストラクタを入れてしまう手があります。

そのあとはコントローラーにPolicyに関する記述を入れずにすみます。

詳しい方法はこちらの記事で解説しているので、ご興味があれば、併せてご覧ください。

じゅんこ
じゅんこ

トラップもあるので、ご注意ください。

そのあたりも、解説しています。

管理者も編集可能にする

最後に管理者もプロフィールを編集できるようにします。

これは、【管理者】権限をどのように設定しているかによって、書き方が変わってきます。

今回はRole(役割)モデルを作り、Userモデルと多対多のリレーションをはってあると想定します。

Roleモデルを作り、リレーションを設定する方法はこちらで解説しています。

Userモデルファイルに、次のような関数を加えます。

UserPolicyファイルの先ほど作成したupdateメソッドを、次のように書き替えます。

これで「ユーザー本人、あるいは管理者権限があるものなら、TRUEを返す」とできました。

再度テストしてみてください。

さいごに

今回は、ユーザープロフィール編集に制限をかける方法を解説しました。

制限がないWebアプリは、不正な操作がいくらでもできてしまいます。

Policyなどを使って、しっかりアクセス制御をしておきましょう。

じゅんこ
じゅんこ

制限がしっかりしたWebアプリを作れれば、顧客の信頼も得られます。

関連記事に他の方法もあるので、併せて参考にしてくださいね。

 

Laravelセキュリティ

お問い合わせ

お問い合わせフォームへ

・生成AIを活用した内製化支援
・Laravel研修・Webアプリ開発
のご相談承ります

サービス紹介・お問い合わせ

お仕事のご相談・お問い合わせ窓口

お問い合わせフォームへ

こちらよりお気軽にお問い合わせください。 ご挨拶&サービスご紹介動画ございます。

サービス紹介&お問い合わせ

【Laravelの教科書・プレゼント】

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

最新版テキストに加え、Laravel8版~Laravel11版もご用意しています♪

【無料プレゼント】

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

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

詳細はこちらをクリック

最新版テキストに加え、Laravel8版からLaravel11版もご用意しています♪

Laravelの本を書きました。


ひつじが目印♪

Laravelの使い方を分かりやすく解説した書籍を出版しました。 ご好評につき、最新版に対応した改訂版を2025年7月に発売
書店やAmazon等のオンラインショップにて販売中です。 詳しくは下記ボタンをクリック

書籍の詳細を見てみる

Laravelの本書きました。


ひつじが目印♪
クリックするとamazonページへ。

Laravelの使い方を分かりやすく解説した書籍を出版しました。ご好評につき最新版対応の改訂版発売。書店やAmazon等のオンラインショップにて販売中です。

書籍の詳細を見てみる
Twitter始めました。
40代からプログラミング!
タイトルとURLをコピーしました