forgetCachedPermissions(); foreach (self::PERMISSIONS as $permissionName) { $this->ensurePermissionExists($permissionName); } // Normalize every Help permission, including any legacy integration // permission whose group was stored as "help" or "HELP". foreach (Permission::all() as $permission) { if (!$this->belongsToHelp($permission)) { continue; } if ($permission->perm_group !== self::PERMISSION_GROUP) { // Only perm_group is changed. Role and user assignments live in // separate pivot tables and therefore remain untouched. $permission->update(['perm_group' => self::PERMISSION_GROUP]); } } app(PermissionRegistrar::class)->forgetCachedPermissions(); } public function down() { // This migration only corrects permission metadata. It is intentionally // not reversible because the original per-row group values are unknown. } private function ensurePermissionExists($name) { $exists = Permission::where('name', $name) ->where('guard_name', 'web') ->exists(); if (!$exists) { Permission::create([ 'name' => $name, 'guard_name' => 'web', 'perm_group' => self::PERMISSION_GROUP, ]); } } private function belongsToHelp(Permission $permission) { return stripos($permission->name, 'help.') === 0 || strcasecmp((string) $permission->perm_group, self::PERMISSION_GROUP) === 0; } };