'rayon', 'permissions' => [ 'rayon.view', 'rayon.edit', 'rayon.create', 'rayon.delete', ] ], [ 'group_name' => 'cost', 'permissions' => [ 'cost.view', 'cost.edit', 'cost.create', 'cost.delete', ] ], [ 'group_name' => 'category', 'permissions' => [ 'category.view', 'category.edit', 'category.create', 'category.delete', ] ], ]; // Do same for the admin guard for tutorial purposes. $admin = Admin::where('username', 'superadmin')->first(); $roleSuperAdmin = $this->maybeCreateSuperAdminRole($admin); // Create and Assign Permissions for ($i = 0; $i < count($permissions); $i++) { $permissionGroup = $permissions[$i]['group_name']; for ($j = 0; $j < count($permissions[$i]['permissions']); $j++) { $permissionExist = Permission::where('name', $permissions[$i]['permissions'][$j])->first(); if (is_null($permissionExist)) { $permission = Permission::create( [ 'name' => $permissions[$i]['permissions'][$j], 'group_name' => $permissionGroup, 'guard_name' => 'admin' ] ); $roleSuperAdmin->givePermissionTo($permission); $permission->assignRole($roleSuperAdmin); } } } // Assign super admin role permission to superadmin user if ($admin) { $admin->assignRole($roleSuperAdmin); } } private function maybeCreateSuperAdminRole($admin): Role { if (is_null($admin)) { $roleSuperAdmin = Role::create(['name' => 'superadmin', 'guard_name' => 'admin']); } else { $roleSuperAdmin = Role::where('name', 'superadmin')->where('guard_name', 'admin')->first(); } if (is_null($roleSuperAdmin)) { $roleSuperAdmin = Role::create(['name' => 'superadmin', 'guard_name' => 'admin']); } return $roleSuperAdmin; } }