get(); if ($roles->isEmpty()) { echo "No content-manager roles found." . PHP_EOL; return; } foreach ($roles as $role) { echo "Processing role: {$role->name}" . PHP_EOL; $currentPermissions = $role->permissions->pluck('name')->toArray(); echo " Current permissions (" . count($currentPermissions) . "):" . PHP_EOL; foreach ($currentPermissions as $p) { $flag = in_array($p, $canonicalPermissions) ? ' OK' : ' REMOVE'; echo " [{$flag}] {$p}" . PHP_EOL; } $toAdd = array_diff($canonicalPermissions, $currentPermissions); $toRemove = array_diff($currentPermissions, $canonicalPermissions); echo " To add (" . count($toAdd) . "): " . implode(', ', $toAdd) . PHP_EOL; echo " To remove (" . count($toRemove) . "): " . implode(', ', $toRemove) . PHP_EOL; // Sync to exactly the canonical set $role->syncPermissions($canonicalPermissions); $after = $role->fresh()->permissions->pluck('name')->sort()->values(); echo " Done. Final permissions (" . count($after) . "):" . PHP_EOL; foreach ($after as $p) { echo " - {$p}" . PHP_EOL; } } // Clear permission cache app()[\Spatie\Permission\PermissionRegistrar::class]->forgetCachedPermissions(); echo PHP_EOL . "Permission cache cleared." . PHP_EOL;