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