id(); $table->string('name'); $table->string('guard_name')->default('web'); $table->timestamps(); $table->unique(['name', 'guard_name']); }); Schema::create('roles', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('guard_name')->default('web'); $table->timestamps(); $table->unique(['name', 'guard_name']); }); Schema::create('model_has_permissions', function (Blueprint $table) { $table->unsignedBigInteger('permission_id'); $table->string('model_type'); $table->unsignedBigInteger('model_id'); $table->foreign('permission_id') ->references('id') ->on('permissions') ->onDelete('cascade'); $table->primary(['permission_id', 'model_id', 'model_type'], 'model_has_permissions_permission_model_primary'); }); Schema::create('model_has_roles', function (Blueprint $table) { $table->unsignedBigInteger('role_id'); $table->string('model_type'); $table->unsignedBigInteger('model_id'); $table->foreign('role_id') ->references('id') ->on('roles') ->onDelete('cascade'); $table->primary(['role_id', 'model_id', 'model_type'], 'model_has_roles_role_model_primary'); }); Schema::create('role_has_permissions', function (Blueprint $table) { $table->unsignedBigInteger('permission_id'); $table->unsignedBigInteger('role_id'); $table->foreign('permission_id') ->references('id') ->on('permissions') ->onDelete('cascade'); $table->foreign('role_id') ->references('id') ->on('roles') ->onDelete('cascade'); $table->primary(['permission_id', 'role_id'], 'role_has_permissions_permission_role_primary'); }); } public function down(): void { Schema::dropIfExists('role_has_permissions'); Schema::dropIfExists('model_has_roles'); Schema::dropIfExists('model_has_permissions'); Schema::dropIfExists('roles'); Schema::dropIfExists('permissions'); } };