id(); $table->string('name')->unique(); $table->string('description')->nullable(); $table->timestamps(); }); Schema::create('permissions', function (Blueprint $table) { $table->id(); $table->string('name')->unique(); $table->string('description')->nullable(); $table->timestamps(); }); Schema::create('permission_role', function (Blueprint $table) { $table->foreignId('permission_id')->constrained()->cascadeOnDelete(); $table->foreignId('role_id')->constrained()->cascadeOnDelete(); $table->primary(['permission_id', 'role_id']); }); Schema::create('role_user', function (Blueprint $table) { $table->foreignId('role_id')->constrained()->cascadeOnDelete(); $table->foreignId('user_id')->constrained()->cascadeOnDelete(); $table->primary(['role_id', 'user_id']); }); Schema::create('external_identities', function (Blueprint $table) { $table->id(); $table->foreignId('user_id')->constrained()->cascadeOnDelete(); $table->string('provider'); $table->string('provider_subject'); $table->string('tenant_id')->nullable(); $table->string('provider_email'); $table->json('claims')->nullable(); $table->timestamp('last_login_at')->nullable(); $table->timestamps(); $table->unique(['provider', 'provider_subject']); }); } public function down(): void { Schema::dropIfExists('external_identities'); Schema::dropIfExists('role_user'); Schema::dropIfExists('permission_role'); Schema::dropIfExists('permissions'); Schema::dropIfExists('roles'); } };