GeneaLabs / laravel-impersonator by mikebronner

Impersonate users in your Laravel 5.4+ app.
108,671
54
3
Package Data
Maintainer Username: mikebronner
Maintainer Contact: hello@genealabs.com (GeneaLabs, LLC)
Package Create Date: 2017-05-09
Package Last Update: 2023-05-20
Home Page:
Language: PHP
License: MIT
Last Refreshed: 2024-12-14 15:06:52
Package Statistics
Total Downloads: 108,671
Monthly Downloads: 6,977
Daily Downloads: 99
Total Stars: 54
Total Watchers: 3
Total Forks: 7
Total Open Issues: 1

Laravel Impersonator

Join the chat at https://gitter.im/GeneaLabs/laravel-impersonator Travis Coveralls

Pre-requisites

  • Bootstrap 3 (4 coming soon)
  • Laravel 5.5
  • PHP 7.0+

Installation

If you are using Larvel 5.4, please switch to the laravel-5.4 branch and follow the instructions there.

composer require genealabs/laravel-impersonator

This package will be auto-loaded by Laravel 5.5, it is not necessary to register any service providers or aliases for this package.

Configuration

  • genealabs-laravel-impersonator.layout: master blade layout view for your application (default layouts.app).
  • genealabs-laravel-impersonator.content-section: name of content section in master layout blade view (default content).
  • genealabs-laravel-impersonator.user-model: user model of your application (default config('auth.providers.users.model')).

If you need to customize these settings:

php artisan impersonator:publish --config

Usage

  1. Add trait GeneaLabs\LaravelImpersonator\Traits\Impersonatable to your user model.
  2. Override trait method public function getCanImpersonateAttribute() : bool that determines if a given user can impersonate other users.
  3. (optional) Override trait method public function getCanBeImpersonatedAttribute() : bool that determines if a given user can be impersonated.
  4. Use route('impersonatees.index') to view a list of all impersonatable users. You could add something like the following to your menu:
@if ((auth()->user()->canImpersonate ?? false) && ! session('impersonator'))
    <a class="dropdown-item" href="{{ route('impersonatees.index') }}">Impersonator</a>
@endif
  1. (optional) Add something like the following to your menu view to allow imporsonator to stop impersonating:
@if (session('impersonator'))
    <a href="{{ url('/logout') }}"
        class="dropdown-item"
        onclick="event.preventDefault(); document.getElementById('end-personation-session-form').submit();"
    >
        End Impersonation Session
    </a>
    <form action="{{ route('impersonatees.destroy', auth()->user()) }}"
        method="POST"
        style="display: none;"
        id="end-personation-session-form"
    >
        {{ csrf_field () }}
        {{ method_field ('DELETE') }}
    </form>
@else
    <a href="{!! route('logout') !!}"
        class="dropdown-item"
        onclick="event.preventDefault(); document.getElementById('logout-form').submit();">
        Logout
    </a>
    <form method="POST"
        action="{{ route('logout') }}"
        accept-charset="UTF-8"
        id="logout-form"
        style="display:none;"
    >
        {{ csrf_field () }}
    </form>
@endif

Customization

php artisan impersonator:publish --views

Credits

In large part prodded and inspired by LaraCasts' tutorial: https://laracasts.com/series/how-do-i/episodes/17. Thank you @JeffreyWay!