stechstudio/filament-impersonate
Filament plugin to impersonate users from your admin panel. Add an Impersonate action to resource tables or page header actions, with optional guard and redirect target. Supports SPA panels with an option to force full page loads when needed.
Full Changelog: https://github.com/stechstudio/filament-impersonate/compare/v5.5.0...v5.6.0
Full Changelog: https://github.com/stechstudio/filament-impersonate/compare/v5.4.0...v5.5.0
Full Changelog: https://github.com/stechstudio/filament-impersonate/compare/v5.3.0...v5.4.0
Full Changelog: https://github.com/stechstudio/filament-impersonate/compare/v5.2.0...v5.3.0
Full Changelog: https://github.com/stechstudio/filament-impersonate/compare/v5.1.0...v5.2.0
Full Changelog: https://github.com/stechstudio/filament-impersonate/compare/v5.0.0...v5.1.0
This is a major release that removes the lab404/laravel-impersonate dependency entirely, replacing it with a lean, native implementation purpose-built for Filament — with full Octane compatibility.
All impersonation logic is now handled internally by ImpersonateManager — a stateless, Octane-safe service registered as a scoped binding. No more pulling in a general-purpose impersonation package.
Impersonation works correctly under Laravel Octane (Swoole and FrankenPHP). The package uses direct session manipulation with Laravel's stock SessionGuard, avoiding any custom guard registration that could break under Octane's request sandboxing.
A new Impersonation facade provides a clean static API:
use STS\FilamentImpersonate\Facades\Impersonation;
Impersonation::isImpersonating();
Impersonation::getImpersonator();
Impersonation::getImpersonatorId();
Impersonation::enter($from, $to, $guardName);
Impersonation::leave();
New package-owned events replace the lab404 events:
STS\FilamentImpersonate\Events\EnterImpersonationSTS\FilamentImpersonate\Events\LeaveImpersonationBoth carry $impersonator and $impersonated public properties.
When impersonation fails (e.g. incompatible guard), a Filament danger notification is now shown instead of silently doing nothing. Diagnostic Log::warning() messages are also emitted for debugging.
lab404/laravel-impersonate dependencyThe package no longer requires or uses lab404/laravel-impersonate. It will be removed from your composer.lock automatically on update.
Impersonate trait (STS\FilamentImpersonate\Models\Impersonate)The trait that was added to User models has been removed. If your User model uses this trait, remove it:
- use STS\FilamentImpersonate\Models\Impersonate;
-
class User extends Authenticatable
{
- use Impersonate;
}
If you had canImpersonate() or canBeImpersonated() methods on your model via the trait, just keep them as regular methods — the action checks for them with method_exists().
guard config keyThe filament-impersonate.guard config option has been removed. The guard is now determined by the Filament panel's auth guard. For per-action override, use ->guard('custom') on the action.
If you published the config file, you can remove the guard key.
If you listen for impersonation events, update your imports:
- use Lab404\Impersonate\Events\TakeImpersonation;
- use Lab404\Impersonate\Events\LeaveImpersonation;
+ use STS\FilamentImpersonate\Events\EnterImpersonation;
+ use STS\FilamentImpersonate\Events\LeaveImpersonation;
ImpersonateManager namespaceIf you referenced the manager directly (most users won't have), the namespace changed:
- use Lab404\Impersonate\Services\ImpersonateManager;
+ use STS\FilamentImpersonate\ImpersonateManager;
Prefer using the Impersonation facade instead.
impersonateRecord() signatureThe unused second parameter $visible has been removed:
- ->impersonateRecord($record, $visible)
+ ->impersonateRecord($record)
Octane compatibility: Replaced custom SessionGuard with direct session manipulation. The custom guard registered via Auth::extend() was not surviving Octane's request sandboxing, causing impersonation to fail silently under Swoole/FrankenPHP. The package now manipulates auth session keys directly using Laravel's stock SessionGuard, removing the fragile class coupling.
Failure notification: When impersonation fails, a Filament danger notification is now shown instead of silently doing nothing.
Diagnostic logging: Log::warning() is now emitted when enter() or leave() fails, with guard and user context for debugging.
LeaveImpersonation event: The $impersonated parameter is now nullable to handle edge cases where the impersonated user was soft-deleted or removed during the session.
setUp() was missing the $record parameter, causing the impersonate button on table rows to silently fail. The visible() callback was correct, so the button appeared but clicking it did nothing. (#146)See v5.0.0-beta.1 for the complete list of changes in the v5 release.
This is a major release that removes the lab404/laravel-impersonate dependency entirely, replacing it with a lean, native implementation purpose-built for Filament.
All impersonation logic is now handled internally by ImpersonateManager — a stateless, Octane-safe service registered as a scoped binding. No more pulling in a general-purpose impersonation package.
A new Impersonation facade provides a clean static API:
use STS\FilamentImpersonate\Facades\Impersonation;
Impersonation::isImpersonating();
Impersonation::getImpersonator();
Impersonation::getImpersonatorId();
Impersonation::enter($from, $to, $guardName);
Impersonation::leave();
A custom SessionGuard with quietLogin() / quietLogout() methods handles user switching without firing Laravel's auth events, preserving session state during impersonation.
New package-owned events replace the lab404 events:
STS\FilamentImpersonate\Events\EnterImpersonationSTS\FilamentImpersonate\Events\LeaveImpersonationBoth carry $impersonator and $impersonated public properties.
lab404/laravel-impersonate dependencyThe package no longer requires or uses lab404/laravel-impersonate. It will be removed from your composer.lock automatically on update.
Impersonate trait (STS\FilamentImpersonate\Models\Impersonate)The trait that was added to User models has been removed. The action uses method_exists() checks, so the trait was never required. If your User model uses this trait, remove it:
- use STS\FilamentImpersonate\Models\Impersonate;
-
class User extends Authenticatable
{
- use Impersonate;
}
If you had canImpersonate() or canBeImpersonated() methods on your model via the trait, just keep them as regular methods — the action checks for them with method_exists().
guard config keyThe filament-impersonate.guard config option has been removed. The guard is now determined by the Filament panel's auth guard (which is the correct default). For per-action override, use ->guard('custom') on the action.
If you published the config file, you can remove the guard key.
If you listen for impersonation events, update your imports:
- use Lab404\Impersonate\Events\TakeImpersonation;
- use Lab404\Impersonate\Events\LeaveImpersonation;
+ use STS\FilamentImpersonate\Events\EnterImpersonation;
+ use STS\FilamentImpersonate\Events\LeaveImpersonation;
ImpersonateManager namespaceIf you referenced the manager directly (most users won't have), the namespace changed:
- use Lab404\Impersonate\Services\ImpersonateManager;
+ use STS\FilamentImpersonate\ImpersonateManager;
Prefer using the Impersonation facade instead.
impersonateRecord() signatureThe unused second parameter $visible has been removed:
- ->impersonateRecord($record, $visible)
+ ->impersonateRecord($record)
app('impersonate') / app(ImpersonateManager::class)These still work, but the recommended API is now the Impersonation facade.
enter() failure is now caught and handled before redirectingclear() now also removes stale remember-me cookie staging datacanImpersonate() boolean chain decomposed into readable guard clausesFull Changelog: https://github.com/stechstudio/filament-impersonate/compare/4.1.3...4.1.4
Full Changelog: https://github.com/stechstudio/filament-impersonate/compare/4.1.2...4.1.3
Full Changelog: https://github.com/stechstudio/filament-impersonate/compare/4.1.1...4.1.2
Full Changelog: https://github.com/stechstudio/filament-impersonate/compare/4.1...4.1.1
Full Changelog: https://github.com/stechstudio/filament-impersonate/compare/4.0.2...4.1
Full Changelog: https://github.com/stechstudio/filament-impersonate/compare/4.0.1...4.0.2
FILAMENT_IMPERSONATE_ROUTE_PREFIX env varFull Changelog: https://github.com/stechstudio/filament-impersonate/compare/4.0...4.0.1
Full Changelog: https://github.com/stechstudio/filament-impersonate/compare/3.16...4.0
Full Changelog: https://github.com/stechstudio/filament-impersonate/compare/3.15...3.16
Full Changelog: https://github.com/stechstudio/filament-impersonate/compare/3.14...3.15
Full Changelog: https://github.com/stechstudio/filament-impersonate/compare/3.13...3.14
Full Changelog: https://github.com/stechstudio/filament-impersonate/compare/3.12...3.13
Full Changelog: https://github.com/stechstudio/filament-impersonate/compare/3.11...3.12
Full Changelog: https://github.com/stechstudio/filament-impersonate/compare/3.10...3.11
Full Changelog: https://github.com/stechstudio/filament-impersonate/compare/3.9...3.10
Full Changelog: https://github.com/stechstudio/filament-impersonate/compare/3.8...3.9
Full Changelog: https://github.com/stechstudio/filament-impersonate/compare/3.7...3.8
Fixes #67
How can I help you explore Laravel packages today?