Laravel Impersonate memudahkan otentikasi sebagai pengguna Anda . Tambahkan sifat sederhana ke model pengguna Anda dan tiru sebagai salah satu pengguna Anda dalam satu klik.
Versi | Melepaskan |
---|---|
6.x hingga 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
Anda: ' providers ' => [
// ...
Lab404 Impersonate ImpersonateServiceProvider ::class,
],
Lab404ImpersonateModelsImpersonate
ke model Pengguna Anda. Meniru identitas pengguna:
Auth :: user ()-> impersonate ( $ other_user );
// You're now logged as the $other_user
Tinggalkan peniruan identitas:
Auth :: user ()-> leaveImpersonation ();
// You're now logged as your original user.
Di file rute Anda, di bawah middleware web, Anda harus memanggil makro rute impersonate
.
Route :: impersonate ();
Alternatifnya, Anda dapat menjalankan makro ini dengan RouteServiceProvider
Anda.
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 ' )
Secara default, semua pengguna dapat meniru identitas pengguna.
Anda perlu menambahkan metode canImpersonate()
ke model pengguna Anda:
/**
* @return bool
*/
public function canImpersonate ()
{
// For example
return $ this -> is_admin == 1 ;
}
Secara default, semua pengguna dapat ditiru .
Anda perlu menambahkan metode canBeImpersonated()
ke model pengguna Anda untuk memperluas perilaku ini:
/**
* @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 ();
Lindungi Dari Peniruan Identitas
Anda dapat menggunakan middleware impersonate.protect
untuk melindungi rute Anda dari peniruan identitas pengguna.
Middleware ini dapat berguna ketika Anda ingin melindungi halaman tertentu seperti langganan pengguna, pengguna kartu kredit, ...
Router :: get ( ' /my-credit-card ' , function () {
echo " Can't be accessed by an impersonator " ;
})-> middleware ( ' impersonate.protect ' );
Ada dua peristiwa yang tersedia yang dapat digunakan untuk meningkatkan alur kerja Anda:
TakeImpersonation
dipecat ketika peniruan identitas dilakukan.LeaveImpersonation
dipecat ketika peniruan identitas ditinggalkan. Setiap peristiwa mengembalikan dua properti $event->impersonator
dan $event->impersonated
yang berisi instance model Pengguna.
Paket ini dilengkapi dengan file konfigurasi.
Publikasikan dengan perintah berikut:
php artisan vendor:publish --tag=impersonate
Opsi yang tersedia:
// 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 ' => ' / '
Ada tiga arahan Blade yang tersedia.
@canImpersonate ( $guard = null )
< a href = " {{ route ( ' impersonate ' , $user -> id ) } } " >Impersonate this user a >
@endCanImpersonate
Ini berguna ketika Anda memiliki daftar pengguna dan ingin menampilkan tombol "Meniru Identitas" di samping semua pengguna. Namun Anda tidak ingin tombol tersebut berada di samping pengguna yang diautentikasi saat ini, begitu juga dengan pengguna yang tidak dapat ditiru sesuai dengan penerapan canBeImpersonated()
Anda.
@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()
saja?Paket ini menambahkan fungsionalitas yang lebih luas, termasuk arahan Blade untuk memungkinkan Anda mengganti analitik dan peristiwa pelacakan lainnya saat melakukan peniruan identitas, mengaktifkan peristiwa berdasarkan status peniruan identitas, dan banyak lagi. Pembahasan singkat pada soal/5
MIT