Step 01: Setting Up migration, factory and seeder of Permission model
// artisan commands php artisan make:model Permission -ms
php artisan make:migration create_permission_role_table
// migration file for permissions table public function up(): void { Schema::create('permissions', function (Blueprint $table) { $table->id(); $table->string('name'); $table->timestamps(); }); }
//changing model Permission.php class Permission extends Model { use HasFactory; protected $fillable = ['name']; }
// PermissionSeeder.php public function run(): void { Permission::create(['name' => 'issues.create']); Permission::create(['name' => 'issues.update']); Permission::create(['name' => 'issues.delete']); }
// DatabaseSeeder.php public function run(): void { $this->call(PermissionSeeder::class); }
Step 02: Setting Up migration, factory and seeder of Role model
//aritsan command php artisan make:model Role -ms
//migration file for roles table public function up(): void { Schema::create('roles', function (Blueprint $table) { $table->id(); $table->string('name'); $table->timestamps(); }); }
// migration file create_permission_role_table public function up(): void { Schema::create('permission_role', function (Blueprint $table) { $table->foreignId('permission_id')->constrained(); $table->foreignId('role_id')->constrained(); }); }
// changing model Role.php class Role extends Model { use HasFactory; protected $fillable = ['name']; public function permissions() { return $this->belongsToMany(Permission::class); } }
// RoleSeeder.php public function run(): void { $admin = Role::create(['name' => 'Administrator']); $admin->permissions()->attach(Permission::pluck('id')); $editor = Role::create(['name' => 'Editor']); $editor->permissions()->attach( Permission::where('name', '!=', 'issues.delete')->pluck('id') ); }
// DatabaseSeeder.php public function run(): void { $this->call(PermissionSeeder::class); $this->call(RoleSeeder::class); }