id(); $table->string('name'); $table->string('guard_name'); $table->timestamps(); $table->unique(['name', 'guard_name']); }); Schema::create('roles', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('guard_name'); $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->index(['model_id', 'model_type']); $table->foreign('permission_id')->references('id')->on('permissions')->cascadeOnDelete(); $table->primary(['permission_id', 'model_id', 'model_type']); }); Schema::create('model_has_roles', function (Blueprint $table) { $table->unsignedBigInteger('role_id'); $table->string('model_type'); $table->unsignedBigInteger('model_id'); $table->index(['model_id', 'model_type']); $table->foreign('role_id')->references('id')->on('roles')->cascadeOnDelete(); $table->primary(['role_id', 'model_id', 'model_type']); }); Schema::create('role_has_permissions', function (Blueprint $table) { $table->unsignedBigInteger('permission_id'); $table->unsignedBigInteger('role_id'); $table->foreign('permission_id')->references('id')->on('permissions')->cascadeOnDelete(); $table->foreign('role_id')->references('id')->on('roles')->cascadeOnDelete(); $table->primary(['permission_id', 'role_id']); }); } 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'); } };