PHP code example of eloquent-works / masquerade

1. Go to this page and download the library: Download eloquent-works/masquerade 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/ */

    

eloquent-works / masquerade example snippets


use EloquentWorks\Masquerade\Facades\Masquerade;

Masquerade::start(
    target: $user,
    reason: 'Troubleshooting support ticket #1042',
    metadata: [
        'ticket_id' => 1042,
    ],
);

Masquerade::isMasquerading();

Masquerade::stop();



namespace App\Models;

use EloquentWorks\Masquerade\Traits\HasMasquerade;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Foundation\Auth\User as AuthenticatableUser;

class User extends AuthenticatableUser
{
    use HasMasquerade;

    public function canMasquerade(Authenticatable $target): bool
    {
        return $this->is_admin && ! $this->is($target);
    }

    public function canBeMasqueradedBy(Authenticatable $impersonator): bool
    {
        return ! $this->is_owner;
    }
}

use EloquentWorks\Masquerade\Facades\Masquerade;

Masquerade::start(
    target: $user,
    reason: 'Troubleshooting checkout issue',
    metadata: [
        'ticket_id' => 1042,
        'source' => 'support-panel',
    ],
);

Masquerade::start(
    target: $user,
    impersonator: $admin,
    guard: 'web',
    reason: 'QA verification',
);

Masquerade::stop();

Masquerade::isMasquerading();
Masquerade::hasExpired();
Masquerade::impersonator();
Masquerade::target();
Masquerade::uuid();
Masquerade::reason();
Masquerade::metadata();
Masquerade::startedAt();
Masquerade::expiresAt();
Masquerade::elapsedSeconds();
Masquerade::remainingSeconds();
Masquerade::isMasqueradingAs($user);
Masquerade::isMasqueradedBy($admin);
Masquerade::session();
Masquerade::context();

Masquerade::updateMetadata([
    'ticket_status' => 'waiting-on-customer',
]);

Masquerade::extend(15, reason: 'Support call is still active');

masquerade()->isMasquerading();
masquerade()->impersonator();
masquerade()->target();
masquerade()->context();

use Illuminate\Support\Facades\Route;

Route::post('/billing/payment-method', UpdatePaymentMethodController::class)
    ->middleware(['auth', 'masquerade.block']);

Route::middleware(['web', 'auth', 'masquerade.duration'])->group(function (): void {
    Route::get('/dashboard', DashboardController::class);
});

Route::get('/support/masquerade-toolbar', SupportToolbarController::class)
    ->middleware(['auth', 'masquerade.

Route::middleware(['web', 'auth', 'masquerade.context'])->group(function (): void {
    Route::get('/support', SupportDashboardController::class);
});

$context = request()->attributes->get('masquerade.context');

'routes' => [
    'enabled' => false,
],

public function canMasquerade(Authenticatable $target): bool
{
    return $this->hasRole('support') && ! $this->is($target);
}

public function canBeMasqueradedBy(Authenticatable $impersonator): bool
{
    return ! $this->hasRole('owner');
}

'permissions' => [
    'use_model_methods' => false,
],

use EloquentWorks\Masquerade\Models\MasqueradeLog;

$logs = MasqueradeLog::query()
    ->latest()
    ->get();

$log->impersonator;
$log->target;

MasqueradeLog::query()->started()->latest()->get();
MasqueradeLog::query()->denied()->latest()->get();
MasqueradeLog::query()->extended()->latest()->get();
MasqueradeLog::query()->forMasqueradeUuid($uuid)->get();
MasqueradeLog::query()->forImpersonator($admin)->get();
MasqueradeLog::query()->forTarget($user)->get();

'duration' => [
    'enabled' => true,
    'minutes' => 60,
],

Route::middleware(['web', 'auth', 'masquerade.duration'])->group(function (): void {
    // Protected app routes...
});

if (Masquerade::stopIfExpired()) {
    // The session was expired and stopped.
}

Route::middleware(['auth', 'masquerade.block'])->group(function (): void {
    Route::post('/password', UpdatePasswordController::class);
    Route::post('/two-factor-authentication', EnableTwoFactorController::class);
    Route::delete('/account', DeleteAccountController::class);
});

EloquentWorks\Masquerade\Events\MasqueradeStarted::class;
EloquentWorks\Masquerade\Events\MasqueradeEnded::class;
EloquentWorks\Masquerade\Events\MasqueradeDenied::class;
EloquentWorks\Masquerade\Events\MasqueradeExpired::class;
EloquentWorks\Masquerade\Events\MasqueradeExtended::class;

use EloquentWorks\Masquerade\Events\MasqueradeStarted;
use Illuminate\Support\Facades\Event;

Event::listen(MasqueradeStarted::class, function (MasqueradeStarted $event): void {
    logger()->info('Masquerade started.', [
        'uuid' => $event->uuid,
        'guard' => $event->guard,
    ]);
});

return [
    'guard' => null,

    'user_model' => env('AUTH_MODEL', 'App\\Models\\User'),

    'session_key' => 'masquerade',

    'routes' => [
        'enabled' => true,
        'prefix' => 'masquerade',
        'middleware' => ['web', 'auth'],
        'name' => 'masquerade.',
        'start_route_parameter' => 'user',
        'redirect_after_start' => '/',
        'redirect_after_stop' => '/',
        'allowed_redirect_hosts' => [],
    ],

    'permissions' => [
        'use_model_methods' => true,
        'impersonator_method' => 'canMasquerade',
        'target_method' => 'canBeMasqueradedBy',
    ],

    'security' => [
        'allow_nested' => false,
        'allow_same_user' => false,
        '

use App\Models\User;
use EloquentWorks\Masquerade\Facades\Masquerade;
use Illuminate\Support\Facades\Auth;

it('allows support admins to masquerade as users', function (): void {
    $admin = User::factory()->create([
        'is_admin' => true,
    ]);

    $user = User::factory()->create();

    Auth::login($admin);

    Masquerade::start($user, reason: 'Support ticket');

    expect(Masquerade::isMasquerading())->toBeTrue();
    expect(Auth::user()->is($user))->toBeTrue();

    Masquerade::stop();

    expect(Auth::user()->is($admin))->toBeTrue();
});

Masquerade::addNote(
    note: 'Checked the customer billing page.',
    metadata: [
        'ticket_id' => 'SUP-1042',
    ],
);

$notes = Masquerade::notes();

Masquerade::start(
    target: $user,
    reason: 'Troubleshooting checkout issue.',
    metadata: [
        'ticket_id' => 'SUP-1042',
        'ticket_url' => 'https://support.example.com/tickets/SUP-1042',
    ],
    category: 'support',
);

Masquerade::ticketId();
Masquerade::ticketUrl();
Masquerade::contextValue('ticket_id');

Masquerade::assertAbilityAllowed('billing.update');

Route::post('/billing', UpdateBillingController::class)
    ->middleware(['auth', 'masquerade.ability:billing.update']);

'risk' => [
    'enabled' => true,
    'max_sessions_per_hour' => 10,
    'max_denied_attempts_per_hour' => 5,
    'max_blocked_abilities_per_hour' => 3,
    'score_threshold' => 1,
],
bash
composer masquerade:install
php artisan migrate
bash
php artisan vendor:publish --tag=masquerade-config
bash
php artisan vendor:publish --tag=masquerade-migrations
bash
php artisan vendor:publish --tag=masquerade-views
bash
php artisan masquerade:install --force
text
POST /masquerade/{user}/start
POST /masquerade/stop
blade
@masquerading
    <div class="alert alert-warning">
        You are currently masquerading as another user.
    </div>
@endmasquerading
bash
php artisan vendor:publish --tag=masquerade-config
bash
php artisan masquerade:install
php artisan masquerade:prune
bash
php artisan masquerade:install --force

php artisan masquerade:prune --days=90 --dry-run
php artisan masquerade:prune --days=90 --force
bash
php artisan masquerade:export --format=csv
php artisan masquerade:export --format=json
php artisan masquerade:export --uuid=00000000-0000-0000-0000-000000000000