adjarriawan/laravel-impersonate

快速登录为其他用户

dev-main 2023-02-01 12:30 UTC

This package is auto-updated.

Last update: 2024-09-12 21:33:37 UTC


README

Demo

Tests Version Downloads License

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)。有关更多信息,请参阅许可证文件