genealabs/laravel-impersonator

在您的 Laravel 和 Nova 应用中模拟用户。

10.0.0 2023-05-20 20:05 UTC

README

Laravel Package codecov

Laravel 模拟器

Impersonator for Laravel masthead image.

支持此包

这是一个 MIT 许可的开源项目,其持续开发得以通过社区的支援实现。如果您想支持该项目以及我们的其他包,请考虑在 Patreon 上成为赞助者或支持者。点击此处

先决条件

  • Laravel 8.0+
  • PHP 7.3+

安装

composer require genealabs/laravel-impersonator

配置

  • genealabs-laravel-impersonator.layout:您的应用程序的 master blade 布局视图(默认 layouts.app)。
  • genealabs-laravel-impersonator.content-section:master 布局 blade 视图中的内容部分名称(默认 content)。
  • genealabs-laravel-impersonator.user-model:您的应用程序的用户模型(默认 config('auth.providers.users.model'))。
  • genealabs-laravel-impersonator.middleware:用于模拟者路由的中间件(默认:['web', 'auth'])。您可以指定 onlyexcept 参数。例如: ['web', 'auth', 'password.confirm' => ['except' => 'destroy']]

如果需要自定义这些设置

php artisan impersonator:publish --config

用法

  1. 将特质 GeneaLabs\LaravelImpersonator\Traits\Impersonatable 添加到您的用户模型。
  2. 重写特质方法 public function getCanImpersonateAttribute() : bool,该方法确定给定的用户是否可以模拟其他用户。
  3. (可选)重写特质方法 public function getCanBeImpersonatedAttribute() : bool,该方法确定给定的用户是否可以被模拟。
  4. 使用 route('impersonatees.index') 查看所有可模拟用户的列表。您可以在菜单中添加以下内容
@if ((auth()->user()->canImpersonate ?? false) && ! session('impersonator'))
    <a class="dropdown-item" href="{{ route('impersonatees.index') }}">Impersonator</a>
@endif
  1. (可选)在菜单视图中添加以下内容,允许模拟器停止模拟
@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

自定义

php artisan impersonator:publish --views

致谢

在很大程度上受到 LaraCasts 教程的启发和推动: https://laracasts.com/series/how-do-i/episodes/17。感谢 @JeffreyWay!