genealabs / laravel-impersonator
Impersonate users in your Laravel and Nova apps.
10.0.0
2023-05-20 20:05 UTC
Requires
- illuminate/config: ^10.0
- illuminate/console: ^10.0
- illuminate/contracts: ^10.0
- illuminate/http: ^10.0
- illuminate/routing: ^10.0
- illuminate/session: ^10.0
- illuminate/support: ^10.0
- illuminate/view: ^10.0
Requires (Dev)
- fakerphp/faker: ^1.9
- laravel/browser-kit-testing: ^7.0
- laravel/nova: ^3.12
- mockery/mockery: ^1.4.4
- nunomaduro/collision: ^7.0
- php-coveralls/php-coveralls: ^2.2
- phpmd/phpmd: ^2.8
- phpunit/phpunit: ^10.0
This package is auto-updated.
Last update: 2024-11-20 23:20:00 UTC
README
Impersonator for Laravel
Supporting This Package
This is an MIT-licensed open source project with its ongoing development made possible by the support of the community. If you'd like to support this, and our other packages, please consider becoming a backer or sponsor on Patreon.
Pre-requisites
- Laravel 8.0+
- PHP 7.3+
Installation
composer require genealabs/laravel-impersonator
Configuration
genealabs-laravel-impersonator.layout
: master blade layout view for your application (defaultlayouts.app
).genealabs-laravel-impersonator.content-section
: name of content section in master layout blade view (defaultcontent
).genealabs-laravel-impersonator.user-model
: user model of your application (defaultconfig('auth.providers.users.model')
).genealabs-laravel-impersonator.middleware
: the middleware to use for the impersonatee routes (default:['web', 'auth']
). You may specifyonly
orexcept
parameters. E.g.['web', 'auth', 'password.confirm' => ['except' => 'destroy']]
If you need to customize these settings:
php artisan impersonator:publish --config
Usage
- Add trait
GeneaLabs\LaravelImpersonator\Traits\Impersonatable
to your user model. - Override trait method
public function getCanImpersonateAttribute() : bool
that determines if a given user can impersonate other users. - (optional) Override trait method
public function getCanBeImpersonatedAttribute() : bool
that determines if a given user can be impersonated. - Use
route('impersonatees.index')
to view a list of all impersonatable users. You could add something like the following to your menu:
@if ((auth()->user()->canImpersonate ?? false) && ! session('impersonator')) <a class="dropdown-item" href="{{ route('impersonatees.index') }}">Impersonator</a> @endif
- (optional) Add something like the following to your menu view to allow imporsonator to stop impersonating:
@if (session('impersonator')) <a href="{{ url('/logout') }}" class="dropdown-item" onclick="event.preventDefault(); document.getElementById('end-personation-session-form').submit();" > End Impersonation Session </a> <form action="{{ route('impersonatees.destroy', auth()->user()) }}" method="POST" style="display: none;" id="end-personation-session-form" > {{ csrf_field () }} {{ method_field ('DELETE') }} </form> @else <a href="{!! route('logout') !!}" class="dropdown-item" onclick="event.preventDefault(); document.getElementById('logout-form').submit();"> Logout </a> <form method="POST" action="{{ route('logout') }}" accept-charset="UTF-8" id="logout-form" style="display:none;" > {{ csrf_field () }} </form> @endif
Customization
php artisan impersonator:publish --views
Credits
In large part prodded and inspired by LaraCasts' tutorial: https://laracasts.com/series/how-do-i/episodes/17. Thank you @JeffreyWay!