Laravel Impersonate упрощает аутентификацию ваших пользователей . Добавьте простую черту в свою пользовательскую модель и выдавайте себя за одного из своих пользователей одним щелчком мыши.
Версия | Выпускать |
---|---|
с 6.x по 11.x | 1,7 |
6.х, 7.х | 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
Массачусетский технологический институт