Laravel Packages

Switch Between Personas in Laravel With the MultiPersona Package

Published
Switch Between Personas in Laravel With the MultiPersona Package image

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.

Paul Redmond photo

Staff writer at Laravel News. Full stack web developer and author.

Sponsored

laravelcloud logo
Laravel Cloud

Easily create and manage your servers and deploy your Laravel applications in seconds.

Visit Laravel Cloud

The latest

View all →
CPX: The Composer Package Executor for PHP image

CPX: The Composer Package Executor for PHP

Read article
Laravel AI SDK Adds Human-in-the-Loop Tool Approval image

Laravel AI SDK Adds Human-in-the-Loop Tool Approval

Read article
Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals image

Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals

Read article
Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs image

Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs

Read article
Blade Formatting in Laravel Pint image

Blade Formatting in Laravel Pint

Read article
Inertia DevTools Is Now on the Chrome Web Store image

Inertia DevTools Is Now on the Chrome Web Store

Read article