書籍「Laravelの教科書」Laravel13対応サポートガイド公開中 → ダウンロードはこちら

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

Laravelセキュリティ

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

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

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

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

じゅんこ
じゅんこ

Gate=門です。

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

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

手順は次のとおり。

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

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

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

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

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

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

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

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

    public function userHasRole($role_name){
        foreach($this->roles as $role){
            if($role_name==$role->name){
                return true;
            }
                return false;
        }

Gateを設定する

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

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

use App\Models\User;

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

        Gate::define('isAdmin', function($user){
            return $user->userHasRole('admin');
        });

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

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

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

これで設定は終わり。

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

Route::get('/profile/edit/{user}', 'ProfileController@edit')->middleware('can:isAdmin');

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

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

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

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

@can('isAdmin')
<button class="btn btn-primary">ボタン</button>
@endcan

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

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

@if(auth()->user()->userHasRole('admin'))
<button class="btn btn-primary">ボタン</button>
@endif

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

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

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

use Gate;

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

        if(Gate::authorize('isAdmin')){
            return view('profile.edit');
        }

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

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

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

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

じゅんこ
じゅんこ

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

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

        if(Gate::denies('isAdmin')){
            return view('profile.edit', compact('user', 'roles'));
        }else  {
            abort(404);
        }

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

さいごに

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

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

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

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

LaravelセキュリティLaravel入門講座

生成AIを「安全に」使うための研修・セミナー

お問い合わせ

生成AIの業務活用で気になるのは、効率だけでなくセキュリティです。 実践的な活用に加え、セキュリティ対策もお伝えします。

詳細を見てみる
 

生成AIを「安全に」使うための研修・セミナー

お問い合わせ

生成AIの業務活用で気になるのは、効率だけでなくセキュリティです。 実践的な活用に加え、セキュリティ対策もお伝えします。

詳細を見てみる

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

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

最新版Laravel13への対応に対応。Laravel8からの各バージョンのテキストもご覧になれます♪

【無料プレゼント】

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

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

詳細はこちらをクリック

最新のLaravel13に対応。Laravel8からの各バージョンのテキストもご覧になれます♪

Laravelの本を書きました。


ひつじが目印♪

Laravelの使い方を分かりやすく解説した本を書きました。 書店やAmazon等のオンラインショップにて販売中
最新版Laravel13対応用サポートガイド(PDF)あり

書籍の詳細を見てみる

Laravelの本書きました。


ひつじが目印♪
クリックするとamazonページへ。
最新版Laravel13対応用
サポートガイド(PDF)あり

書籍の詳細を見てみる
シェアする
Twitter始めました。

コメント

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