octopyid / laravel-impersonate
快速登录为不同的用户
Requires
- php: ^8.1
- illuminate/contracts: ^10.0|^11.0
Requires (Dev)
- nunomaduro/collision: ^7.8|^8.0
- orchestra/testbench: ^8.11|^9.0
Conflicts
README
Laravel Impersonate
是Laravel框架的模拟包。使用此包,您可以轻松地手动或使用我们提供的界面来模拟其他用户。
您无需担心授权谁可以进行模拟或谁可以被模拟,因为我们已默认提供,只需根据您的规则稍作调整即可。
安装
警告
此版本是一个破坏性更改,对添加新功能、新UI设计和代码结构进行了许多更改。
如果您是从旧版本升级的,请删除旧资产并重新发布资产,根据此版本配置并重置限制。
要安装此包,只需按照以下步骤操作。
安装包
composer require octopyid/laravel-impersonate:^4
发布包
artisan vendor:publish --tag="impersonate"
注意
有时一些用户在升级包后可能会遇到布局问题,这可以通过删除
public/vendor/octopyid/impersonate
文件夹然后重新发布资产来解决。
将HasImpersonation
特性添加到用户模型中
将特性Octopy\Impersonate\Concerns\HasImpersonation
添加到您的User
模型中。
namespace App\Models; use Octopy\Impersonate\Concerns\HasImpersonation; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use HasImpersonation; /** * @return string */ public function getImpersonateDisplayText() : string { return $this->name; } /** * This following is useful for performing user searches through the interface, * You can use fields in relations freely using dot notation, * * example: posts.title, department.name. */ public function getImpersonateSearchField() : array { return [ 'name', 'posts.title', ]; } }
事件
有两种可用的事件可用于改进您的工作流程
Octopy\Impersonate\Events\BeginImpersonation
在模拟开始时触发。Octopy\Impersonate\Events\LeaveImpersonation
在模拟结束时触发。
配置
此配置旨在自定义Laravel Impersonate的外观,如果您不需要UI,请确保在环境文件中将IMPERSONATE_ENABLED
设置为false
,因为它默认启用。
请参阅impersonate.php文件以查看可用的配置。
使用方法
基本用法
默认情况下,您不需要做任何事情,但请注意,如果您不定义谁可以进行模拟或谁可以被模拟的规则,则任何人都可以进行模拟。
定义限制
为了限制谁可以进行模拟
或谁可以被模拟
,请在模型上添加setImpersonateAuthorization(Authorization $authorization)
来强制执行限制。
impersonator
方法用于执行模拟的用户,而impersonated
方法用于允许被模仿的任何用户。
警告
在模型中未定义或错误定义授权规则可能导致严重的安全问题。
以下示例使用Laratrust进行角色管理,其中SUPER_ADMIN
可以对CUSTOMER
进行模拟。您可以使用任何您喜欢的其他角色管理。
use Octopy\Impersonate\Concerns\HasImpersonation; use Octopy\Impersonate\Authorization; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use HasImpersonation; /** * @param Authorization $authorization * @return void */ public function setImpersonateAuthorization(Authorization $authorization) : void { $authorization->impersonator(function (User $user) { return $user->hasRole('SUPER_ADMIN'); }); $authorization->impersonated(function (User $user) { return $user->hasRole('CUSTOMER'); }); } }
高级用法
手动模拟用户
有时您需要手动模拟,要执行此操作,您可以使用模拟单例。
impersonate()->begin($admin, $customer);
或者直接通过用户模型调用模拟方法。
$admin->impersonate($customer);
定义守卫
有时,您想使用自定义守卫进行身份验证,而不是内置守卫。
impersonate()->guard('foo')->begin($admin, $customer);
退出模拟模式
要退出模拟模式,你只需在模拟单例上调用leave
方法。这将返回到原始用户。
impersonate()->leave();
或者直接通过模型
$admin->impersonate()->leave();
如有需要,不要犹豫使用守卫。
免责声明
如果使用不当,此包可能会引发严重的安全问题,因为任何人都可以接管任何用户的账户。
通过使用此包,你同意Octopy ID和此包的贡献者不对使用此包造成的任何损害负责。
安全性
如果你发现任何与安全相关的问题,请通过电子邮件bug@octopy.dev报告,而不是使用问题跟踪器。
致谢
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。