Gateで役割によってアクセス・表示制限をかける【Laravel入門講座】

Laravel 入門講座

Laravelには制限をかける方法は色々ありますが、最も手っ取り早いのはGateを使う方法。

今回は GateuserHasRole関数を設定して、役割ごとに表示やアクセス制限をかける方法を解説します。

アクセス制限が適切にされているかどうかで、サイトの信頼度は180度変わってきます。

しっかり制限をかけて、サイトの信頼性を上げていきましょう。

じゅんこ
じゅんこ

Gate=門です。

許可がある人にだけ門が開かれるってイメージですね。

LaravelでGateでアクセス制限をかける方法【Laravel入門講座】

手順は次のとおり。

  1. UserモデルでuserHasRole関数を設定する
  2. Gateを設定する
  3. ルート設定にアクセス制限をかける
  4. ビューファイルに表示設定をかける

なお、最初にRole(役割)モデルを作り、Userモデルとリレーションをはっておく必要があります。

この部分については、別記事で解説しているので、参考にしてください。

今回はすでに、次のようなRoleテーブルがあるとします。

adminが管理者で、userが通常のユーザーです。

UserとRoleは belongToManyリレーションでつながっており、次の中間テーブルがあるとします。

UserモデルでuserHasRole関数を設定する

まず、Userファイルを開き、次のようにuserHasRole関数を設定します。

Gateを設定する

app/Providersの中のAuthServiceProvider.phpを開きます。

上部に次のuse宣言を入れておきます。

そのうえで、次のようにisAdminゲートを設定します。

先ほどのuserHasRole関数を使い、ユーザーがadminかどうかで制限をかけるようにしました。

もしadmin以外の役割を使って制限をかけたいなら、役割名は、適宜変更してください。

ルート設定にアクセス制限をかける

これで設定は終わり。

設定した制限をかけたいルート設定には、次のように ->middleware('can:isAdmin') 入れます。

管理者ではない人がアクセスしようとすると、次のようになります。

ビューファイルに表示設定をかける

ビューファイルにも制限をかけられます。

たとえば管理者だけにボタンが表示されるようにするには、blade.phpファイルに次のようにisAdminゲートを挿入します。

※ちなみに、userHasRole関数だけでも、可能だったりはします。

その場合、次のように書きます。

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

最後にコントローラーに制限をかける方法を紹介します。

制限をかけたいコントローラーファイルの上に、下記のuse宣言をいれておきます。

isAdminゲートを入れたい部分には、次のようにします。

これで、profile.editページはadminユーザーしかアクセスできなくなりました。

他のユーザーがアクセスしようとすると、また403 unauthorized画面が出てきます。

なおGateを使って【アクセスできる】方法を説明しましたが、Gateで【アクセスできなくする】ことも可能です。

その場合には、Gate::deniesを使います。

じゅんこ
じゅんこ

denyは否定するという意味で、deniesは三人称単数形ですね。

adminはprofile.editページにできないようにするには、次のように書きます。

aminがprofile.editページを開こうとすると、404 not found が表示されます。

さいごに

Gateを使って、ルート設定・ビューファイル・コントローラーに制限をかける方法を紹介しました。

アクセス制限は地味ながら、使いやすく、安心できるサイトに不可欠な機能。

そしてLaravelでは、色々な制限が可能です。

関連記事でも解説しているので、他の方法もチェックしてみてくださいね。

コメント

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