Laravel Impersonate ทำให้ การตรวจสอบสิทธิ์เป็นผู้ใช้ของคุณ เป็นเรื่องง่าย เพิ่ม คุณลักษณะ ที่เรียบง่ายให้กับ โมเดลผู้ใช้ ของคุณและปลอมตัวเป็นผู้ใช้ของคุณในคลิกเดียว
เวอร์ชัน | ปล่อย |
---|---|
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
ให้กับโมเดล ผู้ใช้ ของคุณ ปลอมตัวเป็นผู้ใช้:
Auth :: user ()-> impersonate ( $ other_user );
// You're now logged as the $other_user
ออกจากการแอบอ้างบุคคลอื่น:
Auth :: user ()-> leaveImpersonation ();
// You're now logged as your original user.
ในไฟล์เส้นทางของคุณ ภายใต้มิดเดิลแวร์ของเว็บ คุณต้องเรียกมาโครเส้นทาง impersonate
Route :: impersonate ();
หรือคุณสามารถเรียกใช้แมโครนี้ด้วย 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 ' )
ตามค่าเริ่มต้น ผู้ใช้ทุกคนสามารถ ปลอมตัว เป็นผู้ใช้ได้
คุณต้องเพิ่มวิธี canImpersonate()
ให้กับโมเดลผู้ใช้ของคุณ:
/**
* @return bool
*/
public function canImpersonate ()
{
// For example
return $ this -> is_admin == 1 ;
}
โดยค่าเริ่มต้น ผู้ใช้ทุกคนสามารถ เลียนแบบได้
คุณต้องเพิ่มเมธอด canBeImpersonated()
ให้กับโมเดลผู้ใช้ของคุณเพื่อขยายพฤติกรรมนี้:
/**
* @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 ();
ป้องกันการแอบอ้างบุคคลอื่น
คุณสามารถใช้มิดเดิลแวร์ impersonate.protect
เพื่อปกป้องเส้นทางของคุณจากการแอบอ้างบุคคลอื่น
มิดเดิลแวร์นี้จะมีประโยชน์เมื่อคุณต้องการปกป้องเพจเฉพาะ เช่น การสมัครสมาชิกของผู้ใช้ บัตรเครดิตของผู้ใช้ ...
Router :: get ( ' /my-credit-card ' , function () {
echo " Can't be accessed by an impersonator " ;
})-> middleware ( ' impersonate.protect ' );
มีสองเหตุการณ์ที่สามารถใช้เพื่อปรับปรุงขั้นตอนการทำงานของคุณ:
TakeImpersonation
จะเริ่มทำงานเมื่อมีการเลียนแบบLeaveImpersonation
จะเริ่มทำงานเมื่อมีการละเว้นการเลียนแบบ แต่ละเหตุการณ์ส่งคืนคุณสมบัติสองรายการ $event->impersonator
และ $event->impersonated
ที่มีอินสแตนซ์โมเดลผู้ใช้
แพ็คเกจมาพร้อมกับไฟล์กำหนดค่า
เผยแพร่ด้วยคำสั่งต่อไปนี้:
php artisan vendor:publish --tag=impersonate
ตัวเลือกที่มี:
// 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 ' => ' / '
มีคำสั่ง Blade สามแบบให้เลือก
@canImpersonate ( $guard = null )
< a href = " {{ route ( ' impersonate ' , $user -> id ) } } " >Impersonate this user a >
@endCanImpersonate
ซึ่งจะมีประโยชน์เมื่อคุณมีรายชื่อผู้ใช้และต้องการแสดงปุ่ม "สวมบทบาท" ถัดจากผู้ใช้ทั้งหมด แต่คุณไม่ต้องการให้ปุ่มนั้นอยู่ถัดจากผู้ใช้ที่ได้รับการรับรองความถูกต้องในปัจจุบันและผู้ใช้ที่ไม่ควรเลียนแบบตามการใช้งาน 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()
?แพ็คเกจนี้เพิ่มฟังก์ชันการทำงานที่กว้างขึ้น รวมถึงคำสั่ง Blade เพื่อให้คุณสามารถแทนที่การวิเคราะห์และการติดตามเหตุการณ์อื่น ๆ เมื่อทำการแอบอ้าง เรียกใช้เหตุการณ์ตามสถานะการแอบอ้างบุคคลอื่น และอื่นๆ การอภิปรายสั้น ๆ ในประเด็น/5
เอ็มไอที