Laravelでフォームに条件付き表示を加える方法(認証・ロール別)
先生と生徒の会話形式で理解しよう
生徒
「フォームの一部を管理者だけに見せたり、一般ユーザーには非表示にすることってできますか?」
先生
「できます。Laravelでは認証情報やユーザーのロールを使って、Bladeテンプレート内で条件分岐を行えます。」
生徒
「ロールって何ですか?」
先生
「ロールとは、ユーザーの権限の種類のことです。例えば『管理者』『一般ユーザー』『ゲスト』などがあり、それによって表示内容を変えられます。」
1. 認証済みユーザーだけに表示する方法
Laravelでは@authディレクティブを使うと、ログイン済みユーザーにだけ特定のフォームや入力欄を表示できます。
@auth
<div class="form-group">
<label for="secret_note">管理者用メモ</label>
<textarea name="secret_note" id="secret_note" class="form-control"></textarea>
</div>
@endauth
逆にログインしていない場合は@guestを使うと表示できます。
2. ユーザーロールに応じた表示
ユーザーに役割(role)を持たせている場合、Bladeでif文を使って条件分岐できます。例えば、管理者のみボタンを表示する場合です。
@if(Auth::user() && Auth::user()->role === 'admin')
<button class="btn btn-danger">管理者専用ボタン</button>
@endif
ここでAuth::user()->roleは現在ログインしているユーザーのロールを取得しています。
3. 複数の条件でフォーム表示を制御
管理者または特定グループのみ表示したい場合は、||を使って条件を追加できます。
@if(Auth::check() && (Auth::user()->role === 'admin' || Auth::user()->role === 'manager'))
<div class="form-group">
<label>特別権限項目</label>
<input type="text" class="form-control" name="special_item">
</div>
@endif
このようにすると、管理者かマネージャーのみフォーム項目が表示され、他のユーザーには見えません。
4. フォームの安全性とユーザー体験
条件付き表示を使うことで、必要な人にだけ入力欄を見せられるため、フォームがシンプルになります。また、Bladeで表示制御するだけでなく、コントローラ側でもユーザーのロールを確認し、不正アクセスを防ぐことが重要です。
public function store(Request $request)
{
if(Auth::user()->role !== 'admin'){
abort(403, 'アクセス権限がありません');
}
// 管理者専用処理
...
}
フロントエンドだけでなく、バックエンドでもロールチェックを行うことで安全性が高まります。
5. 補足ポイント
@auth/@guestでログイン状態に応じて表示制御- ユーザーロールは
Auth::user()->roleで確認 - 複数条件は
||や&&で組み合わせ可能 - バックエンドでもロールチェックを行い、フォームの安全性を確保する