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
Tinkerwell logo

Tinkerwell

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

Tinkerwell
Typesense Search logo

Typesense Search

Typesense is an open source, blazing-fast search engine, optimized for helping you build delightful search experiences for your sites and apps. Natively integrated with Laravel Scout.

Typesense Search
Blastup logo

Blastup

Blastup provides social media enhancement services including buying Instagram likes, followers, and views, with features like instant delivery and a variety of packages to suit different needs.

Blastup
Laravel Cloud logo

Laravel Cloud

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

Laravel Cloud
No Compromises logo

No Compromises

Joel and Aaron, the two seasoned devs from the No Compromises podcast, are now available to hire for your Laravel project. ⬧ Flat rate of $9500/mo. ⬧ No lengthy sales process. ⬧ No contracts. ⬧ 100% money back guarantee.

No Compromises
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