Switch Between Personas in Laravel with the MultiPersona Package

3 months ago 2

The Laravel MultiPersona package is "a lightweight context-layer system for Laravel users. It allows a single user to switch between different roles, accounts, or tenants dynamically, without creating multiple logins or sessions."

This package is designed by providing a Persona model that is attached to a single user. A package-provided persona service handles operations like getting the current persona, switching between them, checking permissions, etc.

use Illuminate\Foundation\Auth\User as Authenticatable;

use Grazulex\LaravelMultiPersona\Traits\HasPersonas;

class User extends Authenticatable

{

use HasPersonas;

// ... rest of your model

}

// Get current active persona

$currentPersona = persona();

// List all user personas

$userPersonas = auth()->user()->personas;

// Create a new persona

$persona = auth()->user()->createPersona([

'name' => 'Company Admin',

'context' => [

'role' => 'admin',

'company_id' => 123,

'permissions' => ['read', 'write', 'delete']

]

]);

// Switch to persona

auth()->user()->switchToPersona($persona);

This package could be helpful for multi-tenant SaaS applications where users can switch between different company contexts, role-based access, and more. The following snippet is an example from the package's readme, which illustrates creating personas for multiple company contexts:

// User switches between companies

$companyA = $user->createPersona([

'name' => 'Acme Corp Admin',

'context' => [

'company_id' => 1,

'role' => 'admin',

'permissions' => ['manage_users', 'view_reports']

]

]);

$companyB = $user->createPersona([

'name' => 'TechStart User',

'context' => [

'company_id' => 2,

'role' => 'user',

'permissions' => ['view_dashboard']

]

]);

Package Use Cases

  • Multi-tenant SaaS: Users switch between different company contexts
  • Role-based Access: Same user, different permissions per context
  • Agency Management: Manage multiple client accounts
  • Marketplace Platforms: Buyer/seller context switching
  • Enterprise Systems: Department or project-based access

📖 You can get started with this package by following the installation guide.

💻 The source code is available on GitHub at Grazulex/laravel-multipersona.

Read Entire Article