Hire Laravel developers with AI expertise at $20/hr. Get started in 48 hours.

Laravel Multipersona

Laravel Multipersona stats

Downloads
1
Stars
4
Open Issues
0
Forks
0

View on GitHub →

Laravel MultiPersona 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.

Laravel MultiPersona

Laravel MultiPersona

Laravel MultiPersona is a lightweight context-layer system for Laravel users.


Laravel MultiPersona 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.


πŸ” What It Solves

  • Switch between "personas" (admin ↔ client, company A ↔ company B)
  • Contextual permissions and role handling
  • No UI or API enforced – 100% backend, policy, and middleware-driven

πŸ“¦ Installation

composer require grazulex/laravel-multipersona

🧩 Core Concepts

  • Persona: A context attached to a user (e.g. company, role, project)
  • Active Persona: The currently selected context
  • Persona Manager: A service to query, switch, or manipulate personas
  • Middleware: Force or apply a persona context

βœ… Quick Example

// 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);

🧱 What's Provided

  • Trait: HasPersonas for your User model
  • Middleware: EnsureActivePersona, SetPersonaFromRequest
  • Helpers: persona(), personas($user)
  • Events: Complete event system for persona lifecycle
  • Service: PersonaManager for programmatic access
  • Contract: PersonaInterface for custom implementations

❌ What's Not Included

  • No routes or controllers
  • No CLI or HTTP APIs
  • No UI layer – you choose how to expose it

πŸ“š Complete Documentation

Getting Started

Core Features

Advanced Topics

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

🎯 Real-World Examples

Multi-tenant Application

// 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']
]
]);

Middleware Protection

// Protect routes requiring specific roles
Route::middleware(['auth', 'persona.required', 'role:admin'])->group(function () {
Route::get('/admin/dashboard', [AdminController::class, 'dashboard']);
});

Frontend Integration

<!-- Vue.js component -->
<PersonaSelector
:current-persona="currentPersona"
:available-personas="availablePersonas"
@persona-changed="handlePersonaChange"
/>

πŸ§ͺ Testing

The package includes comprehensive test coverage:

composer test

Current test metrics:

  • 58 tests across Unit, Feature, Integration, and Listeners
  • 87% code coverage
  • 149 assertions ensuring reliability

🀝 Contributing

We welcome contributions! See our Contributing Guide for details.

Development Setup

git clone https://github.com/grazulex/laravel-multipersona.git
cd laravel-multipersona
composer install
composer test

πŸ”’ Security

If you discover any security vulnerabilities, please review our Security Policy.

πŸ“„ License

Laravel MultiPersona is open-sourced software licensed under the MIT license.


Made with ❀️ for the Laravel community

πŸ“– Documentation β€’ πŸ› Report Issues β€’ πŸ’¬ Discussions

Grazulex photo

Hi, I'm Jean‑Marc Strauven (aka @grazulex) β€” a passionate developer, open-source enthusiast, and clean-code advocate.

Cube

Laravel Newsletter

Join 40k+ other developers and never miss out on new tips, tutorials, and more.


Grazulex Laravel Multipersona Related Articles

Switch Between Personas in Laravel With the MultiPersona Package image

Switch Between Personas in Laravel With the MultiPersona Package

Read article
Celebian logo

Celebian

Celebian is a social media marketing agency specializing in helping their clients go viral on TikTok. Whether you're looking to reach a bigger audience or gain more Tiktok followers, likes, and views, they've got you covered.

Celebian
Lucky Media logo

Lucky Media

Get Lucky Now - the ideal choice for Laravel Development, with over a decade of experience!

Lucky Media
SaaSykit: Laravel SaaS Starter Kit logo

SaaSykit: Laravel SaaS Starter Kit

SaaSykit is a Multi-tenant Laravel SaaS Starter Kit that comes with all features required to run a modern SaaS. Payments, Beautiful Checkout, Admin Panel, User dashboard, Auth, Ready Components, Stats, Blog, Docs and more.

SaaSykit: Laravel SaaS Starter Kit
Laravel Cloud logo

Laravel Cloud

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

Laravel Cloud
Tinkerwell logo

Tinkerwell

The must-have code runner for Laravel developers. Tinker with AI, autocompletion and instant feedback on local and production environments.

Tinkerwell
The Certification of Competence for Laravel logo

The Certification of Competence for Laravel

A community-driven, proctored assessment across 4 levels designed to validate real-world Laravel knowledge, from Junior to mastery-level Artisan. Official Vue.js, Official Nuxt, Angular, React, JS certifications also available.

The Certification of Competence for Laravel