Laravel Impersonate facilite l' authentification en tant qu'utilisateur . Ajoutez un trait simple à votre modèle d'utilisateur et faites-vous passer pour l'un de vos utilisateurs en un clic.
Version | Libérer |
---|---|
6.x à 11.x | 1.7 |
6.x, 7.x | 1.6 |
5.8 | 1,5 |
5.7, 5.6 | 1.2 |
5.5, 5.4 | 1.1 |
composer require lab404/laravel-impersonate
config/app.php
: ' providers ' => [
// ...
Lab404 Impersonate ImpersonateServiceProvider ::class,
],
Lab404ImpersonateModelsImpersonate
à votre modèle utilisateur . Usurer l'identité d'un utilisateur :
Auth :: user ()-> impersonate ( $ other_user );
// You're now logged as the $other_user
Quitter l'usurpation d'identité :
Auth :: user ()-> leaveImpersonation ();
// You're now logged as your original user.
Dans votre fichier de routes, sous middleware Web, vous devez appeler la macro de route impersonate
.
Route :: impersonate ();
Vous pouvez également exécuter cette macro avec votre RouteServiceProvider
.
namespace App Providers ;
class RouteServiceProvider extends ServiceProvider
{
public function map () {
Route :: middleware ( ' web ' )-> group ( function ( Router $ router ) {
$ router -> impersonate ();
});
}
}
// Where $id is the ID of the user you want impersonate
route ( ' impersonate ' , $ id )
// Or in case of multi guards, you should also add ` guardName ` (defaults to ` web `)
route ( ' impersonate ' , [ ' id ' => $ id , ' guardName ' => ' admin ' ])
// Generate an URL to leave current impersonation
route ( ' impersonate.leave ' )
Par défaut, tous les utilisateurs peuvent usurper l'identité d'un utilisateur.
Vous devez ajouter la méthode canImpersonate()
à votre modèle utilisateur :
/**
* @return bool
*/
public function canImpersonate ()
{
// For example
return $ this -> is_admin == 1 ;
}
Par défaut, tous les utilisateurs peuvent être usurpés .
Vous devez ajouter la méthode canBeImpersonated()
à votre modèle utilisateur pour étendre ce comportement :
/**
* @return bool
*/
public function canBeImpersonated ()
{
// For example
return $ this -> can_be_impersonated == 1 ;
}
// With the app helper
app ( ' impersonate ' )
// Dependency Injection
public function impersonate ( ImpersonateManager $ manager , $ user_id ) { /* ... */ }
$ manager = app ( ' impersonate ' );
// Find an user by its ID
$ manager -> findUserById ( $ id );
// TRUE if your are impersonating an user.
$ manager -> isImpersonating ();
// Impersonate an user. Pass the original user and the user you want to impersonate
$ manager -> take ( $ from , $ to );
// Leave current impersonation
$ manager -> leave ();
// Get the impersonator ID
$ manager -> getImpersonatorId ();
Protéger contre l'usurpation d'identité
Vous pouvez utiliser le middleware impersonate.protect
pour protéger vos itinéraires contre l'usurpation d'identité d'utilisateur.
Ce middleware peut être utile lorsque vous souhaitez protéger des pages spécifiques comme les abonnements des utilisateurs, les cartes de crédit des utilisateurs, ...
Router :: get ( ' /my-credit-card ' , function () {
echo " Can't be accessed by an impersonator " ;
})-> middleware ( ' impersonate.protect ' );
Deux événements sont disponibles et peuvent être utilisés pour améliorer votre flux de travail :
TakeImpersonation
est déclenché lorsqu'une usurpation d'identité est effectuée.LeaveImpersonation
est déclenché lorsqu'une emprunt d'identité est abandonnée. Chaque événement renvoie deux propriétés $event->impersonator
et $event->impersonated
contenant l'instance de modèle User.
Le package est livré avec un fichier de configuration.
Publiez-le avec la commande suivante :
php artisan vendor:publish --tag=impersonate
Options disponibles :
// The session key used to store the original user id.
' session_key ' => ' impersonated_by ' ,
// Where to redirect after taking an impersonation.
// Only used in the built-in controller.
// You can use: an URI, the keyword back (to redirect back) or a route name
' take_redirect_to ' => ' / ' ,
// Where to redirect after leaving an impersonation.
// Only used in the built-in controller.
// You can use: an URI, the keyword back (to redirect back) or a route name
' leave_redirect_to ' => ' / '
Trois directives Blade sont disponibles.
@canImpersonate ( $guard = null )
< a href = " {{ route ( ' impersonate ' , $user -> id ) } } " >Impersonate this user a >
@endCanImpersonate
Cela s'avère pratique lorsque vous disposez d'une liste d'utilisateurs et que vous souhaitez afficher un bouton « Usurper l'identité » à côté de tous les utilisateurs. Mais vous ne voulez pas que ce bouton soit à côté de l'utilisateur authentifié actuel, ni des utilisateurs qui ne devraient pas pouvoir usurper l'identité selon votre implémentation de canBeImpersonated()
.
@canBeImpersonated ( $user , $guard = null )
< a href = " {{ route ( ' impersonate ' , $user -> id ) } } " >Impersonate this user a >
@endCanBeImpersonated
@impersonating ( $guard = null )
< a href = " {{ route ( ' impersonate.leave ' ) } } " >Leave impersonation a >
@endImpersonating
vendor/bin/phpunit
loginAsId()
?Ce package ajoute des fonctionnalités plus larges, notamment des directives Blade pour vous permettre de remplacer les analyses et autres événements de suivi lors de l'usurpation d'identité, de déclencher des événements en fonction de l'état de l'usurpation d'identité, et bien plus encore. Brève discussion sur les numéros/5
MIT