Laravel Impersonate facilita la autenticación de sus usuarios . Agregue un rasgo simple a su modelo de usuario y suplante a uno de sus usuarios con un solo clic.
Versión | Liberar |
---|---|
6.x a 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
a su modelo de usuario . Suplantar a un usuario:
Auth :: user ()-> impersonate ( $ other_user );
// You're now logged as the $other_user
Dejar suplantación:
Auth :: user ()-> leaveImpersonation ();
// You're now logged as your original user.
En su archivo de rutas, en middleware web, debe llamar a la macro impersonate
de ruta.
Route :: impersonate ();
Alternativamente, puede ejecutar esta macro con su 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 ' )
De forma predeterminada, todos los usuarios pueden hacerse pasar por un usuario.
Debes agregar el método canImpersonate()
a tu modelo de usuario:
/**
* @return bool
*/
public function canImpersonate ()
{
// For example
return $ this -> is_admin == 1 ;
}
De forma predeterminada, todos los usuarios pueden ser suplantados .
Debes agregar el método canBeImpersonated()
a tu modelo de usuario para extender este comportamiento:
/**
* @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 ();
Proteger de la suplantación
Puede utilizar el middleware impersonate.protect
para proteger sus rutas contra la suplantación de usuarios.
Este middleware puede resultar útil cuando desee proteger páginas específicas como suscripciones de usuarios, tarjetas de crédito de usuarios, ...
Router :: get ( ' /my-credit-card ' , function () {
echo " Can't be accessed by an impersonator " ;
})-> middleware ( ' impersonate.protect ' );
Hay dos eventos disponibles que se pueden utilizar para mejorar su flujo de trabajo:
TakeImpersonation
se activa cuando se toma una suplantación.LeaveImpersonation
se activa cuando se abandona una suplantación. Cada evento devuelve dos propiedades $event->impersonator
y $event->impersonated
que contienen la instancia del modelo de usuario.
El paquete viene con un archivo de configuración.
Publicarlo con el siguiente comando:
php artisan vendor:publish --tag=impersonate
Opciones 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 ' => ' / '
Hay tres directivas Blade disponibles.
@canImpersonate ( $guard = null )
< a href = " {{ route ( ' impersonate ' , $user -> id ) } } " >Impersonate this user a >
@endCanImpersonate
Esto resulta útil cuando tiene una lista de usuarios y desea mostrar un botón "Suplantar" junto a todos los usuarios. Pero no desea ese botón al lado del usuario autenticado actual ni de los usuarios que no deberían poder suplantarse según su implementación 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()
?Este paquete agrega una funcionalidad más amplia, incluidas directivas Blade que le permiten anular análisis y otros eventos de seguimiento al suplantar, activar eventos según el estado de suplantación y más. Breve discusión en los números/5
MIT