PHPSandboxで、laravelのmiddlewareの練習①_権限テーブル作成、ダミーデータでログインまで

# 内容
表題の通り。

# なぜ記事にした？
・laravelのmiddlewareを使った実装の練習をしたかった
・環境を作るのを省くため、phpsandboxでやりたかった
・ダミーデータでログインする方法が割と書いてない

# 参考
https://qiita.com/shunpeister/items/5ff1d71aedaf86712371
こちらの記事を、phpsandboxで実践します

# 前提知識

[phpsandboxのbash、sqliteの操作](https://qiita.com/forever---searcher/items/99abed6962299193ba55)

# 本編、手順
以下、手順です

## プロジェクトとrolesテーブルの作成

1. テンプレートから、laravel10 breeze（blade）のプロジェクト?（notebook）を作成
1. `php artisan make:migration create_roles_table`を実行：マイグレーション作成。ユーザーマイグレーションファイルは既にあるのがいいところ
1. migrationファイルの中身を変更（※下記）
1. `php artisan migrate`を実行
1. `sqlite3 database.splite`を実行：テーブルの確認

結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1563301/0b945454-390f-d8b0-543f-1e0a4e892148.png)


### ※3のマイグレーションファイルの中身

```~create_roles_table.php
    public function up(): void
    {
        // Schema::create('roles', function (Blueprint $table) {
        //     $table->id();
        //     $table->timestamps();
        // });

        Schema::create('roles', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->timestamps();
        });

        // Inserting initial data
        DB::table('roles')->insert([
            ['name' => '管理者'],
            ['name' => 'リーダー'],
            ['name' => 'マネージャー'],
            ['name' => 'メンバー'],
        ]);
    }
```
```~create_users_table.php
    public function up(): void
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
 +          $table->foreignId('role_id')->constrained('roles');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }
```

## ダミーデータの作成、ログイン
1. `userFactory.php`に`role_id`を追加（※コードは下記）
1. `./database/seeders/DatabaseSeeder.php`について、コメントアウトを外す。
1. `php artisan db:seed`を実行
<br>

ここまでやると、ダミーで作ったメールアドレスとパスワード＝`password123`でログインできるようになる

※1.のコード
```userFactory.php
    public function definition(): array
    {
+       $plainPassword = 'password123'; // 平文のパスワードをあらかじめ指定してしまう
+       $hashedPassword = bcrypt($plainPassword); // 平文のパスワードをハッシュ化
        return [
            'name' => fake()->name(),
            'email' => fake()->unique()->safeEmail(),
            'email_verified_at' => now(),
-           //'password' => static::$password ??= Hash::make('password'),
+           'password' => $hashedPassword, // パスワード
+           'role_id' => $this->faker->numberBetween(1, 4), // 1~4のランダムな整数
            'remember_token' => Str::random(10),
        ];
    }
```

※2. のコード
```DatabaseSeeder.php
    public function run(): void
    {
        \App\Models\User::factory(10)->create(); //コメントアウトを外す
    }
```

結果確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1563301/4272a195-08ba-25fb-2659-ae8433462a2c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1563301/b7ce090b-52ee-2543-191d-abd72b5efc9f.png)



ダミーデータ作成でのトラブルった場合、下記をやってみると解消するかと思います
・`php artisan migrate:fresh`を実行
・`php artisan migrate`を再度実行

---

次回②はロール権限毎にルーティング