O Laravel Impersonate facilita a autenticação de seus usuários . Adicione uma característica simples ao seu modelo de usuário e se faça passar por um de seus usuários com um clique.
Versão | 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
ao seu modelo de usuário . Personificar um usuário:
Auth :: user ()-> impersonate ( $ other_user );
// You're now logged as the $other_user
Deixe a representação:
Auth :: user ()-> leaveImpersonation ();
// You're now logged as your original user.
No seu arquivo de rotas, no middleware da web, você deve chamar a macro de rota impersonate
.
Route :: impersonate ();
Alternativamente, você pode executar esta macro com seu 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 ' )
Por padrão, todos os usuários podem representar um usuário.
Você precisa adicionar o método canImpersonate()
ao seu modelo de usuário:
/**
* @return bool
*/
public function canImpersonate ()
{
// For example
return $ this -> is_admin == 1 ;
}
Por padrão, todos os usuários podem ser representados .
Você precisa adicionar o método canBeImpersonated()
ao seu modelo de usuário para estender este comportamento:
/**
* @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 contra personificação
Você pode usar o middleware impersonate.protect
para proteger suas rotas contra a representação do usuário.
Este middleware pode ser útil quando você deseja proteger páginas específicas, como assinaturas de usuários, cartões de crédito de usuários, ...
Router :: get ( ' /my-credit-card ' , function () {
echo " Can't be accessed by an impersonator " ;
})-> middleware ( ' impersonate.protect ' );
Existem dois eventos disponíveis que podem ser usados para melhorar seu fluxo de trabalho:
TakeImpersonation
é acionado quando uma representação é feita.LeaveImpersonation
é acionado quando uma representação é abandonada. Cada evento retorna duas propriedades $event->impersonator
e $event->impersonated
contendo a instância do modelo de usuário.
O pacote vem com um arquivo de configuração.
Publique-o com o seguinte comando:
php artisan vendor:publish --tag=impersonate
Opções disponíveis:
// 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 ' => ' / '
Existem três diretivas Blade disponíveis.
@canImpersonate ( $guard = null )
< a href = " {{ route ( ' impersonate ' , $user -> id ) } } " >Impersonate this user a >
@endCanImpersonate
Isso é útil quando você tem uma lista de usuários e deseja mostrar um botão “Representar” próximo a todos os usuários. Mas você não quer esse botão próximo ao usuário autenticado atual nem aos usuários que não deveriam ser capazes de representar de acordo com sua implementação 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 pacote adiciona funcionalidades mais amplas, incluindo diretivas Blade para permitir que você substitua análises e outros eventos de rastreamento ao representar, disparar eventos com base no status de representação e muito mais. Breve discussão nas questões/5
MIT