Laravel-Permission で管理者ログイン

####Laravel-Permissionを使うことで管理権者、管理グループを楽に設定。

**ここではログイン画面をカスタマー用と管理者用に分けてみます。**

・Authのカスタマイズ
・/login/{enter_role} とユーザーroleで判断。
・認証後、enter_role とユーザーroleが合わなければ強制ログアウト。

Laravel5.5とLaravel6.0で検証。

[Laravel-Permission インストール](https://qiita.com/Fell/private/7cd398b8ae65ac42950f) が **必須** です。

**・メソッドをオーバーライドするときは元ソースを確認することで理解アップ！**
#####Authのカスタマイズ

```php:App/Http/Controllers/Auth/LoginController.php
//追加
use Illuminate\Http\Request;
use Spatie\Permission\Traits\HasRoles;
use Illuminate\Support\Facades\Auth;
---
class LoginController extends Controller
{
---
    use AuthenticatesUsers;
    //オーバーライド
    protected function redirectTo() {
        if (auth()->user() !== null && auth()->user()->hasRole('admin')) {
            return route('home');
        } else {
            return route('welcome');
        }
    }                                           
    //オーバーライド
    public function showLoginForm($role = null)
    {
	    session(['enter' => $role]);
        return view('auth.login');
    }
    //オーバーライド
    protected function authenticated(Request $request, $user) {
		$role = $user->getRoleNames('items')[0];
		$is_customer_login = (session('enter') == null && $role == 'customer');
		$is_role_login = (session('enter') == $role);
		if ($is_customer_login || $is_role_login) {
			//
		} else {
			Auth::logout();
		}
	}
}
```

```php:app/Http/Controllers/Auth/RegisterController.php
//追加
use Spatie\Permission\Traits\HasRoles;
---
class RegisterController extends Controller
{
---
    //オーバーライド
    protected function create(array $data)
    {
        $user = User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
        ]);
		//デフォルト: role = 'customer'
		$user->assignRole('customer');
		return $user;
    }
}
```
#####route設定

```php:routes/web.php
//ログイン後のリダイレクト先
Route::get('/', function () {
    return view('welcome');
});
Route::get('/home', 'HomeController@index')->name('home');
//追加
Route::get('/login/{role?}', 'Auth\LoginController@showLoginForm');
```
#####画面の色設定（レイアウト）

```php:resources/views/layouts/app.blade.php
    //追加変更
	<link href="{{ asset('css/app.css') }}" rel="stylesheet">
		@if (session('enter') !== null)
			<style>body{background-color: tomato;}</style>
		@endif
---
    <!-- Authentication Links -->
    @guest
        @if (session('enter') == null)
            <li><a href="{{ route('login') }}">Login</a></li>
            <li><a href="{{ route('register') }}">Register</a></li>
        @endif
    @else 
--
    @endguest
---
```
#####ログイン後の画面表示

```php:resources/views/home.blade.php
---
    //変更
    <div class="panel-body">
        @role('admin')
            <div class="alert alert-success">管理者様
        @endrole
        @role('customer')
            <div>お客様
        @endrole
        のログインです。</div>
    </div>
```
####動作確認
Laravel5.5 + Laravel-Permission-v2
Laravel6.0 + Laravel-Permission-v3

ユーザーデータは [Laravel-Permission インストール](https://qiita.com/Fell/private/7cd398b8ae65ac42950f) を参照。

customerユーザー
/login -> ログイン
![WS000046.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455147/9ac126f1-efcf-1642-6fec-55f1cb144099.jpeg)
管理者ユーザー
/login/admin -> ログイン
![WS000046.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455147/a3a9d46a-866c-523f-349d-d5c673a853f7.jpeg)

新規ユーザー登録はcustomerになります。
管理者等はtinkerやseedで登録してください。
ご意見・ご指摘お願いします。