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 personaauth()->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.