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.
.png)


