PHP code example of bernskiold / laravel-data-scrubber
1. Go to this page and download the library: Download bernskiold/laravel-data-scrubber library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
bernskiold / laravel-data-scrubber example snippets
namespace App\Models;
use Bernskiold\LaravelDataScrubber\Concerns\ScrubsData;
use Bernskiold\LaravelDataScrubber\Contracts\Scrubbable;
use Bernskiold\LaravelDataScrubber\Data\ScrubbableFields;
use Bernskiold\LaravelDataScrubber\Strategies\AnonymizeEmailWithIdStrategy;
use Bernskiold\LaravelDataScrubber\Strategies\AnonymizeFirstNameStrategy;
use Bernskiold\LaravelDataScrubber\Strategies\AnonymizeLastNameStrategy;
use Bernskiold\LaravelDataScrubber\Strategies\DeleteFileStrategy;
use Bernskiold\LaravelDataScrubber\Strategies\HashStrategy;
use Bernskiold\LaravelDataScrubber\Strategies\NullStrategy;
use Bernskiold\LaravelDataScrubber\Strategies\RedactedStrategy;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class User extends Model implements Scrubbable
{
use ScrubsData;
use SoftDeletes;
/**
* Define which records should be scrubbed.
*
* In this example, we scrub soft-deleted records that are older than 30 days
* and haven't already been scrubbed.
*/
public function scrubbableQuery(): Builder
{
return static::query()
->onlyTrashed()
->where('deleted_at', '<', now()->subDays(30))
->whereNull('scrubbed_at');
}
/**
* Define which fields should be scrubbed and how.
*/
public function scrubbableFields(): ScrubbableFields
{
return ScrubbableFields::make([
'email' => AnonymizeEmailWithIdStrategy::class,
'first_name' => AnonymizeFirstNameStrategy::class,
'last_name' => AnonymizeLastNameStrategy::class,
'phone' => NullStrategy::class,
'ssn' => RedactedStrategy::class,
'address' => HashStrategy::class,
'profile_photo' => DeleteFileStrategy::class,
]);
}
}
use Bernskiold\LaravelDataScrubber\Data\ScrubbableFields;
use Bernskiold\LaravelDataScrubber\Strategies\MaskStrategy;
use Bernskiold\LaravelDataScrubber\Strategies\TruncateStrategy;
use Bernskiold\LaravelDataScrubber\Strategies\JsonFieldStrategy;
use Bernskiold\LaravelDataScrubber\Strategies\ConditionalStrategy;
use Bernskiold\LaravelDataScrubber\Strategies\NullStrategy;
use Bernskiold\LaravelDataScrubber\Strategies\RedactedStrategy;
public function scrubbableFields(): ScrubbableFields
{
return ScrubbableFields::make([
// Mask phone numbers: "1234567890" → "12******90"
'phone' => new MaskStrategy(visibleStart: 2, visibleEnd: 2, maskChar: '*'),
// Mask SSN showing only last 4: "123-45-6789" → "XXXXXXX6789"
'ssn' => new MaskStrategy(visibleStart: 0, visibleEnd: 4, maskChar: 'X'),
// Truncate names: "Jonathan" → "Jon***"
'name' => new TruncateStrategy(keepChars: 3, suffix: '***'),
// Truncate addresses: "123 Main Street" → "123 M..."
'address' => new TruncateStrategy(keepChars: 5, suffix: '...'),
// Scrub specific keys in JSON data
'metadata' => new JsonFieldStrategy([
'phone' => new MaskStrategy(2, 2),
'ssn' => NullStrategy::class,
'address' => RedactedStrategy::class,
]),
// Apply different strategies based on conditions
'sensitive_data' => new ConditionalStrategy(
condition: fn ($value, $model) => $model->
use Bernskiold\LaravelDataScrubber\Data\ScrubbableFields;
use Bernskiold\LaravelDataScrubber\Strategies\AnonymizeEmailWithIdStrategy;
use Bernskiold\LaravelDataScrubber\Strategies\CallbackStrategy;
public function scrubbableFields(): ScrubbableFields
{
return ScrubbableFields::make([
'email' => AnonymizeEmailWithIdStrategy::class,
'metadata' => new CallbackStrategy(function ($value, $model, $field) {
// Custom logic here
return json_encode(['scrubbed' => true, 'at' => now()->toIso8601String()]);
}),
]);
}
public function scrubbableFields(): ScrubbableFields
{
return ScrubbableFields::make()
->add('email', AnonymizeEmailWithIdStrategy::class)
->add('first_name', AnonymizeFirstNameStrategy::class);
}
$table->scrubbedAt();
use Bernskiold\LaravelDataScrubber\Data\ScrubOptions;
public function getScrubOptions(): ScrubOptions
{
return ScrubOptions::defaults()
->dontLogScrubTimestamp(); // Disable timestamp logging
}
public function getScrubOptions(): ScrubOptions
{
return ScrubOptions::defaults()
->useTimestampColumn('data_cleaned_at');
}
// Get records that haven't been scrubbed
User::notScrubbed()->get();
// Get records that have been scrubbed
User::scrubbed()->get();
$user = User::find(1);
// Preview what will be scrubbed
$preview = $user->previewScrub();
// Perform the scrub
$user->scrub();
// Check if already scrubbed
if ($user->hasBeenScrubbed()) {
// Already scrubbed
}
public function getScrubOptions(): ScrubOptions
{
return ScrubOptions::defaults()
->useTimestampColumn('data_cleaned_at')
->useChunkSize(100)
->scrubSynchronously(); // or scrubAsynchronously()
}
use Bernskiold\LaravelDataScrubber\Events\Scrubbed;
use Bernskiold\LaravelDataScrubber\Listeners\LogScrubbedActivity;
protected $listen = [
Scrubbed::class => [
LogScrubbedActivity::class,
],
];
// config/data-scrubber.php
'activity_log' => [
'event' => 'data_scrubbed',
'description' => 'Record data was scrubbed',
],
use Bernskiold\LaravelDataScrubber\Events\Scrubbed;
use Bernskiold\LaravelDataScrubber\Listeners\ScrubActivityLogListener;
protected $listen = [
Scrubbed::class => [
ScrubActivityLogListener::class,
],
];
use Bernskiold\LaravelDataScrubber\Contracts\ScrubsActivityLog;
use Bernskiold\LaravelDataScrubber\Data\ScrubbableFields;
class User extends Model implements Scrubbable, ScrubsActivityLog
{
// Opt out of activity log scrubbing entirely
public function shouldScrubActivityLog(): bool
{
return true; // or false to skip
}
// Use different strategies for activity log scrubbing
public function activityLogScrubbableFields(): ?ScrubbableFields
{
return ScrubbableFields::make([
'email' => RedactedStrategy::class, // Different from model's strategy
]);
// Return null to use the same strategies as scrubbableFields()
}
}