pinetco-dev / laravel-impersonate
Laravel Impersonate - A package that allows for easy and secure user impersonation within a Laravel application.
Requires
- php: >=8.1
- illuminate/contracts: >=9.0
- spatie/laravel-package-tools: ^1.13.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^6.0
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^7.0
- pestphp/pest: ^1.21
- pestphp/pest-plugin-laravel: ^1.1
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.5
- spatie/laravel-ray: ^1.26
README
Laravel Impersonate is a package that allows you to easily and securely impersonate other users within a Laravel application. This can be particularly useful for debugging problems and generating scenarios after deploying your application to production.
Installation
You can install the package via composer:
composer require pinetco-dev/laravel-impersonate
Once you have installed the package, you can publish and run the migrations with the following command:
php artisan vendor:publish --tag="impersonate-migrations"
php artisan migrate
Usage
The package comes with a configuration file that allows you to customize its settings according to your needs. You can publish the configuration file using the following command:
php artisan vendor:publish --tag="impersonate-config"
After publishing the configuration file, you need to specify the URL where impersonate webhooks should hit your application. To do this, add the following line to your routes file:
Route::impersonation();
Middleware
If you want to protect specific pages against user impersonation, you can use the impersonate.protect middleware. For example:
Router::get('/payment', function() { echo "This page cannot be accessed by an impersonator."; })->middleware('impersonate.protect');
Blade
There are some blade directives available that allow you to customize the behavior of your application depending on whether the user can impersonate or is being impersonated.
When the user can impersonate
@canImpersonate <a href="{{ route('impersonate', $user) }}">Login as {{ $user->name }}</a> @endCanImpersonate
When the user is being impersonated
@impersonating <a href="{{ route('impersonate.leave', ['impersonate' => get_impersonate_session_value()]) }}"> Leave impersonation mode </a> @endImpersonating
Testing
You can run the tests using the following command:
composer test
Changelog
Please see CHANGELOG for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
Credits
License
The MIT License (MIT). Please see License File for more information.