'forms.country', 'permissions' => [ 'forms.country.view', 'forms.country.create', 'forms.country.edit', 'forms.country.delete', 'forms.country.approve', ] ], [ 'group_name' => 'forms.vehicle', 'permissions' => [ 'forms.vehicle.view', 'forms.vehicle.create', 'forms.vehicle.edit', 'forms.vehicle.delete', 'forms.vehicle.approve', ] ], [ 'group_name' => 'forms.entertainment', 'permissions' => [ 'forms.entertainment.view', 'forms.entertainment.create', 'forms.entertainment.edit', 'forms.entertainment.delete', 'forms.entertainment.approve', ] ], [ 'group_name' => 'forms.meeting', 'permissions' => [ 'forms.meeting.view', 'forms.meeting.create', 'forms.meeting.edit', 'forms.meeting.delete', 'forms.meeting.approve', ] ], [ 'group_name' => 'forms.other', 'permissions' => [ 'forms.other.view', 'forms.other.create', 'forms.other.edit', 'forms.other.delete', 'forms.other.approve', ] ] ]; // 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; } }