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 ' => ' / '
세 가지 블레이드 지시문을 사용할 수 있습니다.
@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()
사용하지 않는 걸까요?이 패키지는 가장할 때 분석 및 기타 추적 이벤트를 재정의할 수 있도록 하는 블레이드 지시어, 가장 상태에 따른 이벤트 발생 등을 포함하여 더 광범위한 기능을 추가합니다. 이슈/5에 대한 간략한 토론
MIT