adjarriawan / laravel-impersonate
快速登录为其他用户
Requires
- php: ^8.0|^8.1
Requires (Dev)
- nunomaduro/collision: ^6.2
- orchestra/testbench: ^7.5
Conflicts
This package is auto-updated.
Last update: 2024-09-12 21:33:37 UTC
README
Laravel Impersonate
是一个为 Laravel 框架设计的模仿包。使用此包,您可以轻松地手动或使用我们提供的界面模仿其他用户。
您无需担心谁可以模仿或谁可以被模仿的授权问题,因为我们默认提供了它,只需根据您的规则稍作调整即可。
1. 安装
警告
此版本是一个重大更改,对新增功能、新 UI 设计和代码结构进行了许多更改。
如果您是从旧版本升级,请删除旧资产并重新发布资产,根据此版本配置并重置 限制。
要安装包,请按照以下步骤操作。
1.1. 安装包
composer require octopyid/laravel-impersonate:^3
1.2. 发布包
artisan vendor:publish --provider="Octopy\Impersonate\ImpersonateServiceProvider"
注意
有时一些用户在升级包后可能会遇到布局问题,这可以通过删除
public/vendor/octopyid/impersonate
文件夹然后重新发布资产来解决。
1.3. 将模仿特性添加到用户模型
将特性 Octopy\Impersonate\Concerns\Impersonate
添加到您的 User 模型中。
namespace App\Models; use Octopy\Impersonate\Cocerns\Impersonate; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use Impersonate; }
2. 配置
此配置旨在自定义 Laravel Impersonate 的外观,如果您不需要 UI,不要忘记在您的环境文件中将 IMPERSONATE_ENABLED
设置为 false
,因为它默认启用。
请参阅 impersonate.php 文件以查看可用的配置。
3. 使用方法
3.1. 基本用法
默认情况下,您不需要做任何事情,但请记住,如果未定义可以执行模仿或可以模仿的用户规则,则任何人都可以进行模仿。
3.1.1. 定义限制
为了限制谁可以执行 模仿 或谁可以被 模仿,请将 impersonatable(ImpersonateAuthorization $authorization)
添加到模型中,以强制执行限制。
模仿者 方法是指可以执行模仿的人,而 被模仿者 方法是指被允许被模仿的人。
警告
在模型中未定义或错误定义模仿授权规则可能导致严重的安全问题。
以下示例使用 Laratrust 进行角色管理,其中 SUPER_ADMIN 可以对 CUSTOMER 进行模仿。您可以使用任何其他您喜欢的角色管理。
use Octopy\Impersonate\Cocerns\Impersonate; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use Impersonate; /** * @param ImpersonateAuthorization $authorization * @return void */ public function impersonatable(ImpersonateAuthorization $authorization) : void { $authorization->impersonator(function (User $user) { return $user->hasRole('SUPER_ADMIN'); }); $authorization->impersonated(function (User $user) { return $user->hasRole('CUSTOMER'); }); } }
3.2. 高级用法
3.2.1. 手动模仿用户
有时您需要手动模仿,为了执行它,您可以使用模仿单例。
$impersonate = App::make('impersonate'); $impersonate->take($admin, $customer);
或者您可以直接通过用户模型调用模仿方法。
$admin->impersonate($customer);
3.2.2. 定义守卫
有时,您想使用自定义守卫进行认证,而不是内置守卫。
定义守卫有两种方式。
3.2.2.1. 即时定义
$impersonate->guard('foo')->impersonate($admin, $customer);
3.2.2.2. 全局定义
您可以通过将守卫与 AppServiceProvider
注册来使用守卫对所有模仿授权操作。
public function boot() : void { App::make('impersonate')->guard('foo'); }
3.2.3. 离开模仿授权模式
要退出模拟授权模式,你只需在模拟单例上调用 leave
方法。这将返回到原始用户。
$impersonate->leave();
或者直接通过模型,但无法即时使用保护。
$admin->impersonate->leave();
如果你需要,不要犹豫使用保护。
免责声明
如果使用不当,此包可能引发严重的安全问题,因为任何人都可以控制任何用户的账户。
通过使用此包,你同意 Octopy ID 和此包的贡献者不对使用此包造成的任何损害负责。
安全性
如果你发现任何与安全相关的问题,请通过电子邮件 supianidz@gmail.com 联系,而不是使用问题跟踪器。
致谢
许可证
MIT 许可证 (MIT)。有关更多信息,请参阅许可证文件。