# 前準備
### 6系のmake:auth
$ php composer.phar require laravel/ui
$ php artisan ui vue –auth
### usersテーブルとuser_idにbelongsToのrolesテーブル
$ php artisan make:model Role -m
create_users_table
-> role_idは便宜上、nullableにしておく
Schema::create('users', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->integer('role_id')->nullable();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
create_roles_table
Schema::create('roles', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->timestamps();
        });
$ php artisan migrate
mysql> insert into roles (name) values (‘administrator’);
mysql> insert into roles (name) values (‘subscriber’);
### font end
$ npm install
$ npm run dev
### ユーザーデータ作成
$ php artisan serve –host 192.168.33.10 –port 8000
// ユーザ作成
http://192.168.33.10:8000/register
->田中太郎(‘administrator’)
->山田一郎(‘subscriber’)
// role_idを付与
mysql> update users set role_id=1 where id=1;
mysql> update users set role_id=2 where id=2;
mysql> select * from users;
ここまでは大体、10~15分位
# auth認証
### middleware作成
$ php artisan make:middleware IsAdmin
app/Http/Kernel.php
protected $routeMiddleware = [
        //省略
        'IsAdmin'=>\App\Http\Middleware\IsAdmin::class,
    ];
### Userモデルで権限判定処理
User.php
public function IsAdmin(){
        if($this->role->name == 'administrator'){
            return true;
        }
        return false;
    }
Route
Route::get('/', function () {
    // return view('welcome');
    $user = Auth::user();
    if($user->IsAdmin()){
    	echo "this user is administartor";
    }
});
### middlewareの処理
app/Http/Middleware/IsAdmin.php
-> adminでなければtopにリダイレクト
use Illuminate\Support\Facades\Auth;
public function handle($request, Closure $next)
    {
        $user = Auth::user();
        if(!$user->isAdmin()){
            return redirect()->intended('/');
        }
        return $next($request);
    }
$ php artisan make:controller –resource AdminController
$ php artisan make:controller –resource SubscriberController
### route
Route::group(['middleware' => 'auth'], function(){
	Route::get('/admin/', 'AdminController@index');
	Route::get('/', 'SubscriberController@index');
});
### admin, subscriberのview作成
resources/views/admin/index.blade.php
resources/views/subscriber/index.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	this is {{ $user->role->name }}, {{ $user->name }}<br>
        <form id="logout-form" action="{{ route('logout') }}" method="POST" name="logout">
          @csrf
          <a href="javascript:document.logout.submit()">ログアウト</a>
        </form>
</body>
</html>
### controller
AdminController
public function __construct(){
        $this->middleware('IsAdmin');
    }
    public function index()
    {
        //
        $user = Auth::user();
        return view('admin.index', compact('user'))
    }
### ログイン後のリダイレクト先の変更
app/Http/Middleware/RedirectIfAuthenticated.php
public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check()) {
            // return redirect(RouteServiceProvider::HOME);
            return redirect('/admin');
        }
        return $next($request);
    }
app/Http/Controllers/Auth/LoginController.php
app/Http/Controllers/Auth/RegisterController.php
app/Http/Controllers/Auth/ResetPasswordController.php
protected $redirectTo = '/admin';
これだと、administratorは、’/admin’, ‘/’ 両方アクセスできるので、IsSubscriberのMiddlewareを作らないと駄目か。
subscriberの挙動は期待通りになる。
 
					 
