【laravel6.0】同じログイン画面で、一般ユーザとadminユーザを振り分ける(Gateを使ってusersの管理権限をadminユーザのみにする)
usersテーブルからadminテーブルを作るより簡単!
複数の企業が利用できるECサイト(楽天みたいな)をlaravel5.5で作る場合は、権限が複数(ユーザ・企業・システム管理者)必要なので、実装してみた。
1, usersテーブルにカラム追加(roleとかadmin_flagみたいな感じで)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public function up() { Schema::create('users', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name'); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->boolean('admin_flag')->nullable()->default(FALSE)->comment('管理者フラグ'); $table->rememberToken(); $table->timestamps(); }); } |
2, app/Providers/AppServiceProvider.phpにGateを記述
1 2 3 4 5 6 7 |
public function boot() { // adminのみ許可 \Gate::define('admin', function ($user) { return ($user->admin_flag == 1); }); } |
3, app/Http/Controllers/Auth/LoginController.phpに、ログイン後のリダイレクト先を、管理者かどうかで振り分ける。
1 2 3 4 5 6 7 8 9 10 |
//protected $redirectTo = '/home'; protected function redirectTo() { $admin_flag = $this->guard()->user()->admin_flag; if($admin_flag == 1){ return '/admin'; }else{ return '/user'; } } |
4, userテーブルのcrud(新規作成・更新・削除)操作は、管理者だけ出来るようにする。
app/Http/Controllers/Auth/RegisterController.phpに、ユーザの新規作成を認証済ユーザだけに変更する
1 2 3 4 5 |
public function __construct() { // $this->middleware('guest'); $this->middleware('auth'); } |
5, routes/web.phpで、ルーティングを振り分ける
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
// デフォルトのユーザ認証をコメントアウトして、ユーザ登録は管理者のみ行えるようにする // Auth::routes(); Route::get('/home', 'HomeController@index')->name('home'); // ログイン・ログアウトは誰でも出来る。 Route::get('login', 'Auth\LoginController@showLoginForm')->name('login'); Route::post('login', 'Auth\LoginController@login'); Route::post('logout', 'Auth\LoginController@logout')->name('logout'); /* 標準のユーザ管理機能は使わない! Route::get('/password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request'); Route::post('/password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email'); Route::get('/password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset'); Route::post('/password/reset', 'Auth\ResetPasswordController@reset'); //ユーザー登録 Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register'); Route::post('register', 'Auth\RegisterController@register'); */ // システム管理者のみ Route::group(['prefix' => 'admin', 'middleware' => ['auth', 'can:admin']], function () { Route::resource('user', 'AdminController'); }); // 一般ユーザのみ Route::group(['prefix' => 'user', 'middleware' => ['auth']], function() { Route::get('/', function () { return "user"; }); }); Route::get('/', function () { return "guest"; }); |
6, ここまで来たら、usersテーブルのcrudを作る。AdminController.phpとviews/admin/いろいろ.blade.phpを作るだけなので省略。
1 2 |
php artisan make:controller AdminController --resource # create.blade.phpとedit.blade.phpは、register.blade.phpをコピペして、action先だけAdminControllerの方へ変更すればOK。 |