Laravel投稿サイト構築.53 機能制限はマルチログインではなく認可機能で!
前回。
散々マルチログイン機能であがいていたが、ちょっと諦めつつあった。
代替案を検討していたところ、ユーザによって機能を制限するにはマルチログインより認可機能(Gate、Policy)が向いているのではないかと思い始める。
■GateとPolicyの違い
どちらも認可を与える機能ですが、Policyはある特定のモデルに対して行うアクション(作成、更新、削除、閲覧等)に関してアクセス制限を行います。そのためモデルごとに個別の独立したPolicyファイルを作成します。Gateは”主に”特定のモデルに関連していないユーザのアクションに関してアクセス制限を行う時に使用します。例えば管理者画面にアクセスできるユーザを制限させるといったことにGateを利用することができます。
読めば読むほどマルチログインより認可機能の方が目的にマッチしている感。
■Gateによる認可機能
app\Providers\AuthServiceProvider.php
のboot関数に追記する。
Gate::define('isAdmin',function($user){
return $user->role == 'administrator';
});
コントローラ等でGateのisAdmin判定した際に、
ユーザの管理者権限(role)が'administrator'である場合のみ動作を許可するというもの。
さっそくやってみましょう。
■ユーザテーブルの準備
マルチログインで行った諸々の修正はあとで戻すとして、ユーザマスタに管理者権限(role)の項目を追加する。文字列である必要もないと思うので、intで。
デフォルトで0として、直接更新して値が9の場合管理者ということにする。
■Bladeファイルで制御
Bladeファイルで管理者の場合のみ削除ボタンを表示する制御。
@can('isAdmin')
//削除ボタン表示
@else
@endcan
■動作確認
管理者の場合
管理者以外
目的の動作が確認できてしまった。
なんだったんだマルチログイン機能。
続く