Laravelでユーザーがもつ権限で ページのアクセスを割り振る方法

こんにちは!
個人開発者の南です。

今回はLaravelで、各ページのアクセスをユーザーのもつ権限によりページのアクセスを割り振る方法を紹介します。

ちなみに、今回使用するLaravelのバージョンは6系になります。

Laravelのauthでデフォルトの認証機能をセットアップする

Laravel6では、artisanコマンドのmake:authで認証を追加できなくなりました。

認証機能を追加するには、下記の手順で追加します。

Laravel uiのインストール

まずは、下記のコマンドでLaravel uiをインストールします。

ログインのUIを生成

下記コマンドでログインのUIを生成するのに必要なものをセットアップします。

ちなみに、上記ではVueJsを使うことになっていますが、Reactなどを使いたい場合は下記のように記述することができます。

公式ドキュメント(英語)

migratefileのセットアップ

最後に下記コマンドでログイン機能のデータベースを作成します。

これで「ドメイン名.com/login」で下記のようにログイン画面が表示されます。


ユーザー権限の追加

ログイン画面が表示できたら、今度はユーザーに権限をもたせるための「role」を記述していきます。

それぞれ下記2つのファイルに追加します。

・database/migrations/create_users_table.php
・app/User.php

create_users_tableの編集

ファイルを開いて、ENUM型でユーザーの権限を追加します。

ちなみに、ENUM型は設定した文字列(今回では’member’と’admin’)以外の文字列は受け付けないという型になります。

roleの項目を追加したあとは下記のような記述になります。

設定ができたら、freshコマンドでデータベースを更新します。

※ちなみに、このコマンドを入力すると一度全てのテーブルが削除され、もう一度migrationが走ります。

そのため、現在稼働しているものがあれば、別の方法でテーブルの項目を追加しましょう。

User.phpの編集

現状のままだと、「mass assignment」エラーが出るので、「app/User.php」にguardedを加えておきます。

middlewareの追加

次は、ユーザーの権限を見て認証を制御する方法を追加します。

今回はユーザーの権限が「admin」だった場合、管理画面のアクセスを許可するといったことを想定した実装を行います。

artisanコマンドでmiddlewareを作成しましょう。

middleware artisanコマンドを実行すると、下記ディレクトリに作成したものが生成されます。

「app/Http/Middleawre/Admin.php」

デフォルトの中身を下記のように変更します。

これでユーザーの権限を見て認証を制御する方法を追加できました。

Kernelに追加

作成したミドルウェアを使用するには、Laravelの「app/Http/Kernel.php」に追加する必要があります。

app/Http/Kernel.phpを開いて、「$routeMiddleware」の箇所に作成したmiddlewareを追加しておきましょう。

動作の確認

最後に動作の確認を行います。

artisanコマンドで、コントローラーを作成し、先程追加したmiddlewareを使用します。

コントローラーが作成できたら、中身を下記のように記述します。

コントローラーの中身が追加できたら、web.phpに「admin」のルートを追加します。

ルートの追加ができたら、roleが「member」のユーザー、「admin」のユーザーを作成してそれぞれで管理画面へのアクセスを試してみましょう。

admin権限を持ったユーザーの場合は、下記画面にアクセスできます。


これで、ユーザー権限により認証を制御することができました。

まとめ

今回は、Laravelでユーザー権限によりページのアクセスを割り振る方法を紹介しました。

ユーザー権限でアクセスの制御を行うという処理は、色んなところで使うことが多い処理だと思います。

今回の記事がお役に立てれば幸いです。

この記事を書いた人

南 健太郎

1991年生まれ。都内でエンジニアをしています。
このブログでは、個人開発や日々の技術に関する情報などを発信していきます。