Impersonate with multi auth guard support.
composer require banityt/laravel-impersonate
- Implements Impersonatable Contract and use Impersonatable Trait in your user model.
use BaniTo\Impersonate\Contracts\Impersonatable as ImpersonatableContract;
use BaniTo\Impersonate\Traits\Impersonatable as ImpersonatableTrait;
class User extends Authenticatable implements ImpersonatableContract
{
use ImpersonatableTrait;
//...
}
- Set your guard name in your user model
public function guardName()
{
return 'web'; // or any custom guard name specified in config/auth.php
}
- (Optional) You can customize your impersonation related rights
public function canImpersonate() : bool
{
return Bouncer::can('users_impersonate');
}
public function canBeImpersonated() : bool
{
return !Bouncer::is('admin');
}
Through user model or facade
use Impersonate;
// Impersonate other user, can be another user with other guard
auth()->user()->impersonate($anotherUser);
Auth::user()->impersonate($otherGuardUser);
Impersonate::impersonate($impersonator, $beingImpersonated);
// Stop impersonating
auth()->user()->stopImpersonating();
Auth::user()->stopImpersonating();
Impersonate::stopImpersonating();
Check if user is impersonating
auth()->user()->isImpersonating();
Auth::user()->isImpersonating();
Impersonate::isImpersonating();
// blade example
@if (Impersonate::isImpersonating())
<a href="{{route('your.route.impersonate.stop')}}">{{__('Stop Impersonation')}}</a>
@endif