Mit Laravel Impersonate können Sie sich ganz einfach als Ihre Benutzer authentifizieren . Fügen Sie Ihrem Benutzermodell eine einfache Eigenschaft hinzu und geben Sie sich mit einem Klick als einer Ihrer Benutzer aus.
Version | Freigeben |
---|---|
6.x bis 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
hinzu: ' providers ' => [
// ...
Lab404 Impersonate ImpersonateServiceProvider ::class,
],
Lab404ImpersonateModelsImpersonate
zu Ihrem Benutzermodell hinzu. Sich als Benutzer ausgeben:
Auth :: user ()-> impersonate ( $ other_user );
// You're now logged as the $other_user
Hinterlassen Sie Identitätsdiebstahl:
Auth :: user ()-> leaveImpersonation ();
// You're now logged as your original user.
In Ihrer Routendatei müssen Sie unter Web-Middleware das impersonate
-Route-Makro aufrufen.
Route :: impersonate ();
Alternativ können Sie dieses Makro mit Ihrem RouteServiceProvider
ausführen.
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 ' )
Standardmäßig können alle Benutzer die Identität eines Benutzers übernehmen.
Sie müssen die Methode canImpersonate()
zu Ihrem Benutzermodell hinzufügen:
/**
* @return bool
*/
public function canImpersonate ()
{
// For example
return $ this -> is_admin == 1 ;
}
Standardmäßig können alle Benutzer imitiert werden .
Sie müssen Ihrem Benutzermodell die Methode canBeImpersonated()
hinzufügen, um dieses Verhalten zu erweitern:
/**
* @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 ();
Vor Identitätsdiebstahl schützen
Sie können die Middleware impersonate.protect
verwenden, um Ihre Routen vor Benutzeridentitätsbetrug zu schützen.
Diese Middleware kann nützlich sein, wenn Sie bestimmte Seiten wie Benutzerabonnements, Benutzerkreditkarten usw. schützen möchten.
Router :: get ( ' /my-credit-card ' , function () {
echo " Can't be accessed by an impersonator " ;
})-> middleware ( ' impersonate.protect ' );
Es stehen zwei Ereignisse zur Verfügung, mit denen Sie Ihren Arbeitsablauf verbessern können:
TakeImpersonation
wird ausgelöst, wenn ein Identitätswechsel durchgeführt wird.LeaveImpersonation
wird ausgelöst, wenn ein Identitätswechsel verlassen wird. Jedes Ereignis gibt zwei Eigenschaften zurück $event->impersonator
und $event->impersonated
, die eine Benutzermodellinstanz enthalten.
Das Paket enthält eine Konfigurationsdatei.
Veröffentlichen Sie es mit dem folgenden Befehl:
php artisan vendor:publish --tag=impersonate
Verfügbare Optionen:
// 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 ' => ' / '
Es stehen drei Blade-Anweisungen zur Verfügung.
@canImpersonate ( $guard = null )
< a href = " {{ route ( ' impersonate ' , $user -> id ) } } " >Impersonate this user a >
@endCanImpersonate
Dies ist praktisch, wenn Sie über eine Benutzerliste verfügen und neben allen Benutzern die Schaltfläche „Identität übernehmen“ anzeigen möchten. Sie möchten diese Schaltfläche jedoch nicht neben dem aktuell authentifizierten Benutzer haben, und auch nicht zu den Benutzern, die gemäß Ihrer Implementierung von canBeImpersonated()
nicht in der Lage sein sollten, sich auszugeben.
@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()
verwenden?Dieses Paket fügt umfassendere Funktionen hinzu, einschließlich Blade-Anweisungen, die es Ihnen ermöglichen, Analysen und andere Tracking-Ereignisse beim Identitätswechsel zu überschreiben, Ereignisse basierend auf dem Identitätswechselstatus auszulösen und vieles mehr. Kurze Diskussion zu Themen/5
MIT