octopyid/laravel-impersonate

快速登录为不同的用户

v4.0.3 2024-04-18 16:42 UTC

README

Demo

Tests Version Downloads License

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