stechstudio / filament-impersonate
一个用于模拟用户行为的 Filament 扩展包。
Requires
- filament/filament: ^3.0
- lab404/laravel-impersonate: ^1.7
This package is auto-updated.
Last update: 2024-08-27 12:29:46 UTC
README
这是一个为 Filament 开发的插件,使得模拟用户行为变得简单。
致谢
此包底层使用 https://github.com/404labfr/laravel-impersonate,并大量借鉴了 https://github.com/KABBOUCHI/nova-impersonate。
安装
按照常规操作
composer require stechstudio/filament-impersonate
快速开始
1. 添加表格操作
首先打开你希望添加模拟操作的资源页面。这通常是你的 UserResource
类。
找到 table
方法。在定义完表格列后,你可以通过 actions
方法为表格添加 Impersonate
作为新的操作。你的类应该看起来像这样
namespace App\Filament\Resources; use Filament\Resources\Resource; use STS\FilamentImpersonate\Tables\Actions\Impersonate; class UserResource extends Resource { public static function table(Table $table) { return $table ->columns([ // ... ]) ->actions([ Impersonate::make(), // <--- ]); }
你还可以为操作定义 guard
和 redirectTo
Impersonate::make('impersonate') ->guard('another-guard') ->redirectTo(route('some.other.route'));
2. 添加页面操作
现在打开你希望按钮出现的页面,这通常是 EditUser
;
转到 getActions
方法,并在这里添加 Impersonate
页面操作。
<?php namespace App\Filament\Resources\UserResource\Pages; use App\Filament\Resources\UserResource; use Filament\Resources\Pages\EditRecord; use STS\FilamentImpersonate\Pages\Actions\Impersonate; class EditUser extends EditRecord { protected static string $resource = UserResource::class; protected function getActions(): array { return [ Impersonate::make()->record($this->getRecord()) // <-- ]; } }
注意:你必须传递记录,就像这个例子一样!
3. 在 blade 布局中添加横幅
唯一需要做的另一步是在你模拟其他用户时,在你的应用中显示通知。打开你的主布局文件,在 </body>
标签之前添加 <x-impersonate::banner/>
。
4. 完成收益!
就是这样。现在你应该能在 Filament 的 UserResource
列表中看到每个用户的旁边都有一个操作图标
当你点击模拟图标时,你将登录为该用户,并被重定向到你的主应用。你会在页面顶部看到模拟横幅,并有一个按钮来离开并返回 Filament
配置
所有配置都可以通过 ENV 变量管理,无需直接发布和编辑配置文件。只需查看 配置文件。
授权
默认情况下,只有 Filament 管理员可以模拟其他用户。你可以通过在 FilamentUser
类中添加 canImpersonate
方法来控制这一点
class User implements FilamentUser { public function canImpersonate() { return true; } }
你还可以控制哪些目标可以被模拟。只需在用户类中添加一个 canBeImpersonated
方法,并添加你需要的任何逻辑
class User { public function canBeImpersonated() { // Let's prevent impersonating other users at our own company return !Str::endsWith($this->email, '@mycorp.com'); } }
自定义横幅
Blade 组件有一些你可以自定义的选项。
样式
横幅默认是暗色,你可以将其设置为浅色或自动。
<x-impersonate::banner style='light'/>
显示名称
横幅将显示被模拟的用户名称,假设存在 name
属性。如果需要,你可以自定义它。
<x-impersonate::banner :display='auth()->user()->email'/>