PHPackages                             sh4rck3/laravel-impersonate-spa - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Authentication &amp; Authorization](/categories/authentication)
4. /
5. sh4rck3/laravel-impersonate-spa

ActiveLibrary[Authentication &amp; Authorization](/categories/authentication)

sh4rck3/laravel-impersonate-spa
===============================

Pacote Laravel para personificação de usuários compatível com SPA (Jetstream, Inertia.js, Vue 3, Sanctum)

v1.1.3(6mo ago)03MITPHPPHP ^8.2

Since Oct 29Pushed 6mo agoCompare

[ Source](https://github.com/sh4rck3/laravel-impersonate-spa)[ Packagist](https://packagist.org/packages/sh4rck3/laravel-impersonate-spa)[ RSS](/packages/sh4rck3-laravel-impersonate-spa/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (8)Versions (8)Used By (0)

Laravel Impersonate SPA
=======================

[](#laravel-impersonate-spa)

[![Latest Version on Packagist](https://camo.githubusercontent.com/1e9bd5e289122076c8ce1bc2f27a1f240e6f1e48b415c56db59abf1bf0772ae5/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f73683472636b332f6c61726176656c2d696d706572736f6e6174652d7370612e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/sh4rck3/laravel-impersonate-spa)[![Total Downloads](https://camo.githubusercontent.com/06ff4697d5cce9826c9eff1ea16d570ec1717e107260136ef7d7e6cca4c9eee0/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f73683472636b332f6c61726176656c2d696d706572736f6e6174652d7370612e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/sh4rck3/laravel-impersonate-spa)[![License](https://camo.githubusercontent.com/afb924c795f018d4405586681d2326b313da4b716779bcfba632741434839fa6/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f73683472636b332f6c61726176656c2d696d706572736f6e6174652d7370612e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/sh4rck3/laravel-impersonate-spa)

🎯 **Pacote Laravel para personificação de usuários compatível com SPA** - Funciona perfeitamente com Jetstream, Inertia.js, Vue 3 e Sanctum.

✨ Características
-----------------

[](#-características)

- 🎯 **Compatível com SPA**: Funciona perfeitamente com Inertia.js e Vue 3
- 🔐 **Sanctum Ready**: Compatibilidade total com autenticação Laravel Sanctum
- 🎨 **Componentes Vue**: Componentes Vue.js pré-construídos para integração fácil
- ⚡ **Baseado em Sessão**: Personificação simples e confiável baseada em sessão
- 🔧 **Instalação Automática**: Comandos Artisan para configuração automatizada
- 🎮 **Integração SweetAlert**: Diálogos de confirmação bonitos
- 🛡️ **Sistema de Permissões**: Verificação flexível de permissões
- 📱 **Design Responsivo**: Componentes de interface amigáveis para mobile

📋 Requisitos
------------

[](#-requisitos)

Antes de instalar, certifique-se de que seu projeto Laravel tenha a **stack SPA completa**:

### ✅ Requisitos Obrigatórios:

[](#-requisitos-obrigatórios)

- **PHP** 8.2 ou superior
- **Laravel** 12.0 ou superior
- **Laravel Jetstream** 5.3 ou superior com Inertia.js
- **Inertia.js** 2.0 ou superior
- **Vue 3**
- **Laravel Sanctum** 4.0 ou superior (incluído no Jetstream)

### 📦 Stack SPA Recomendada:

[](#-stack-spa-recomendada)

```
# Criar projeto Laravel
composer create-project laravel/laravel meu-projeto

# Instalar Jetstream com Inertia + Vue
composer require laravel/jetstream:"^5.3"
php artisan jetstream:install inertia

# Instalar dependências frontend
npm install && npm run build

# Configurar banco
php artisan migrate

# (Opcional) Instalar Spatie Permission para controle de permissões
composer require spatie/laravel-permission:"^6.21"
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
php artisan migrate

# (Opcional) Instalar SweetAlert2 para notificações bonitas
npm install vue-sweetalert2 sweetalert2
```

### ⚠️ Importante:

[](#️-importante)

Este pacote foi **desenvolvido especificamente para projetos SPA** com Jetstream + Inertia + Vue. Não funcionará corretamente em:

- ❌ Projetos Laravel tradicionais com Blade
- ❌ Projetos sem Inertia.js
- ❌ Projetos sem Sanctum
- ❌ SPAs com outras tecnologias (React, Angular, etc.)

🚀 Instalação
------------

[](#-instalação)

### 1. Instalar via Composer

[](#1-instalar-via-composer)

```
composer require sh4rck3/laravel-impersonate-spa
```

### 2. Executar Instalação Automática

[](#2-executar-instalação-automática)

```
php artisan impersonate-spa:install
```

Este comando irá:

- ✅ Publicar o arquivo de configuração
- ✅ Registrar o middleware automaticamente
- ✅ Adicionar métodos necessários ao seu User model
- ✅ Configurar flash messages para Inertia
- ✅ Publicar componentes Vue.js

### 3. Limpar Cache

[](#3-limpar-cache)

```
php artisan config:clear
```

⚙️ Configuração
---------------

[](#️-configuração)

### 1. Métodos do User Model

[](#1-métodos-do-user-model)

O comando de instalação adiciona automaticamente estes métodos ao seu `app/Models/User.php`:

```
/**
 * Verifica se este usuário pode personificar outros usuários.
 */
public function canImpersonate(): bool
{
    // Verificar permissão específica
    return $this->can('user_impersonate');

    // Ou verificar role específica
    // return $this->hasRole('Administrator');
}

/**
 * Verifica se este usuário pode ser personificado.
 */
public function canBeImpersonated(): bool
{
    // Impedir super admins de serem personificados
    return !$this->hasRole('Super Admin');

    // Ou verificar status do usuário
    // return $this->status === 'active';
}
```

### 2. Adicionar Banner ao Layout

[](#2-adicionar-banner-ao-layout)

Adicione o banner ao seu layout principal (ex: `AppLayout.vue`):

```

import ImpersonationBanner from '@/vendor/impersonate-spa/ImpersonationBanner.vue'
// ou se você copiou o componente para sua pasta de componentes:
// import ImpersonationBanner from '@/Components/ImpersonationBanner.vue'

```

### 3. Adicionar Botões de Personificação

[](#3-adicionar-botões-de-personificação)

Em seu componente de gerenciamento de usuários:

```

                {{ user.name }}
                {{ user.email }}

import ImpersonateButton from '@/vendor/impersonate-spa/ImpersonateButton.vue'

```

🎮 Uso
-----

[](#-uso)

### Funções Helper

[](#funções-helper)

```
// Verificar se está personificando
if (is_impersonating()) {
    // Usuário está personificando alguém
}

// Obter ID do usuário personificado
$impersonatedUserId = get_impersonated_user_id();

// Obter ID do usuário original
$originalUserId = get_original_user_id();
```

### Dados Compartilhados do Frontend

[](#dados-compartilhados-do-frontend)

O pacote compartilha automaticamente estes dados com Inertia:

```
// Disponível em todos os componentes Vue
$page.props.isImpersonating        // boolean
$page.props.impersonatedUser       // { id, name, email } ou null
```

🎨 Componentes Vue
-----------------

[](#-componentes-vue)

### ImpersonationBanner

[](#impersonationbanner)

Exibe um banner de aviso quando personificando com informações do usuário e botão de parar.

```

```

### ImpersonateButton

[](#impersonatebutton)

Botão personalizável para iniciar personificação.

**Props:**

- `userId` (Number|String, obrigatório): ID do usuário para personificar
- `userName` (String): Nome do usuário para diálogo de confirmação
- `label` (String): Texto do botão
- `variant` (String): Estilo do botão - 'primary', 'secondary', 'danger'
- `size` (String): Tamanho do botão - 'xs', 'sm', 'md', 'lg'
- `disabled` (Boolean): Desabilitar o botão

**Exemplos:**

```

```

⚙️ Configuração Avançada
------------------------

[](#️-configuração-avançada)

Publique o arquivo de configuração para personalização:

```
php artisan vendor:publish --tag=impersonate-spa-config
```

```
// config/impersonate-spa.php

return [
    // Model do usuário
    'user_model' => 'App\Models\User',

    // Chaves da sessão
    'session_key' => 'impersonate',
    'original_user_key' => 'original_user_id',

    // Configuração de rotas
    'route_prefix' => 'impersonate',
    'middleware' => ['auth:sanctum', 'verified'],

    // Rotas de redirecionamento
    'redirect_after_start' => 'dashboard',
    'redirect_after_stop' => 'dashboard',

    // Mensagens personalizadas
    'messages' => [
        'start_success' => 'Personificação iniciada com sucesso para :name!',
        'stop_success' => 'Personificação finalizada com sucesso!',
    ],
];
```

🎮 Integração com SweetAlert2
----------------------------

[](#-integração-com-sweetalert2)

O pacote se integra automaticamente com SweetAlert2 se disponível:

```
# Instalar SweetAlert2
npm install vue-sweetalert2 sweetalert2

# Registrar no app.js
import VueSweetalert2 from 'vue-sweetalert2'
import 'sweetalert2/dist/sweetalert2.min.css'

app.use(VueSweetalert2)
```

🛡️ Segurança
------------

[](#️-segurança)

### Considerações Importantes:

[](#considerações-importantes)

1. **Sempre validar permissões** antes de permitir personificação
2. **Registrar atividades de personificação** para auditoria
3. **Limitar escopo de personificação** com restrições de role adequadas
4. **Usar HTTPS** em ambientes de produção
5. **Revisões regulares de permissões** para usuários com direitos de personificação

### Exemplo de Log de Auditoria:

[](#exemplo-de-log-de-auditoria)

```
// No seu User model ou Service
public function logImpersonation($targetUserId, $action = 'start')
{
    Log::info('User Impersonation', [
        'original_user_id' => auth()->id(),
        'target_user_id' => $targetUserId,
        'action' => $action,
        'ip_address' => request()->ip(),
        'user_agent' => request()->userAgent(),
        'timestamp' => now(),
    ]);
}
```

🧪 Comandos Disponíveis
----------------------

[](#-comandos-disponíveis)

```
# Instalação completa
php artisan impersonate-spa:install

# Instalar sem banner
php artisan impersonate-spa:install --no-banner

# Instalar sem registrar middleware automaticamente
php artisan impersonate-spa:install --no-middleware

# Publicar apenas configuração
php artisan impersonate-spa:publish --config

# Publicar apenas componentes
php artisan impersonate-spa:publish --components

# Publicar apenas stubs
php artisan impersonate-spa:publish --stubs

# Publicar tudo
php artisan impersonate-spa:publish --all
```

🔧 Solução de Problemas
----------------------

[](#-solução-de-problemas)

### Problemas Comuns:

[](#problemas-comuns)

**Middleware não funcionando:**

- Certifique-se de que o middleware está registrado na ordem correta
- Execute: `php artisan config:clear`

**Componentes não encontrados:**

- Execute: `php artisan impersonate-spa:publish --components`
- Verifique os caminhos de importação nos seus arquivos Vue

**Flash messages não aparecendo:**

- Verifique a configuração de flash message no HandleInertiaRequests
- Confirme a instalação do SweetAlert2

**Erros de permissão:**

- Implemente os métodos `canImpersonate()` e `canBeImpersonated()` no User model
- Verifique as permissões/roles do usuário

📝 Changelog
-----------

[](#-changelog)

Veja [CHANGELOG.md](CHANGELOG.md) para mais informações sobre as mudanças recentes.

🤝 Contribuindo
--------------

[](#-contribuindo)

Contribuições são bem-vindas! Por favor, veja [CONTRIBUTING.md](CONTRIBUTING.md) para detalhes.

🔒 Vulnerabilidades de Segurança
-------------------------------

[](#-vulnerabilidades-de-segurança)

Se você descobrir uma vulnerabilidade de segurança, por favor envie um e-mail para .

👨‍💻 Créditos
------------

[](#‍-créditos)

- [sh4rck3](https://github.com/sh4rck3)
- [Todos os Contribuidores](../../contributors)

📄 Licença
---------

[](#-licença)

The MIT License (MIT). Veja [License File](LICENSE.md) para mais informações.

---

🎯 Exemplo Completo de Instalação
--------------------------------

[](#-exemplo-completo-de-instalação)

```
# 1. Criar projeto Laravel com Jetstream
composer create-project laravel/laravel meu-projeto
cd meu-projeto
composer require laravel/jetstream:"^5.3"
php artisan jetstream:install inertia
npm install && npm run build

# 2. Configurar banco e migrar
php artisan migrate

# 3. (Opcional) Instalar Spatie Permission
composer require spatie/laravel-permission:"^6.21"
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
php artisan migrate

# 4. (Opcional) Instalar SweetAlert2
npm install vue-sweetalert2 sweetalert2

# 5. Instalar o pacote de personificação
composer require sh4rck3/laravel-impersonate-spa
php artisan impersonate-spa:install
php artisan config:clear

# 6. Pronto! Configurar permissões e usar os componentes
```

🎉 **Agora você tem personificação funcionando perfeitamente no seu projeto SPA!**

###  Health Score

34

—

LowBetter than 77% of packages

Maintenance67

Regular maintenance activity

Popularity3

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity52

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

7

Last Release

195d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/18fc5f02be671cf66f9a5cacc38dfc3797173363ce21679532f19a15fca0190d?d=identicon)[sh4rck3](/maintainers/sh4rck3)

---

Top Contributors

[![sh4rck3](https://avatars.githubusercontent.com/u/22382486?v=4)](https://github.com/sh4rck3 "sh4rck3 (8 commits)")

---

Tags

laravelimpersonationsanctuminertiavuejetstreamSPApersonificacao

###  Code Quality

TestsPHPUnit

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/sh4rck3-laravel-impersonate-spa/health.svg)

```
[![Health](https://phpackages.com/badges/sh4rck3-laravel-impersonate-spa/health.svg)](https://phpackages.com/packages/sh4rck3-laravel-impersonate-spa)
```

###  Alternatives

[tymon/jwt-auth

JSON Web Token Authentication for Laravel and Lumen

11.5k49.1M350](/packages/tymon-jwt-auth)[php-open-source-saver/jwt-auth

JSON Web Token Authentication for Laravel and Lumen

8359.8M53](/packages/php-open-source-saver-jwt-auth)[laragear/two-factor

On-premises 2FA Authentication for out-of-the-box.

339785.3k8](/packages/laragear-two-factor)[alajusticia/laravel-logins

Session management in Laravel apps, user notifications on new access, support for multiple separate remember tokens, IP geolocation, User-Agent parser

2011.0k](/packages/alajusticia-laravel-logins)[hasinhayder/tyro

Tyro - The ultimate Authentication, Authorization, and Role &amp; Privilege Management solution for Laravel 12 &amp; 13

6712.1k2](/packages/hasinhayder-tyro)[truckersmp/steam-socialite

Laravel Socialite provider for Steam OpenID.

1516.7k](/packages/truckersmp-steam-socialite)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
