Пакет Laravel MultiPersona є "легковаговою системою контекстного управління для користувачів Laravel". Він дозволяє одному користувачу динамічно змінювати різні ролі, акаунти або контексти без необхідності створювати кілька логінів чи сесій.
Цей пакет передбачає наявність моделі Persona
, яка прив'язується до одного користувача. Сервіс персон, наданий пакетом, виконує операції на кшталт отримання поточної персоні, перемикання між ними, перевірки прав доступу тощо.
use Illuminate\Foundation\Auth\User as Authenticatable;
use Grazulex\LaravelMultiPersona\Traits\HasPersonas;
class User extends Authenticatable
{
use HasPersonas;
// ... решта вашої моделі
}
// Отримати активну персону
$currentPersona = persona();
// Список усіх персон користувача
$userPersonas = auth()->user()->personas;
// Створити нову персону
$persona = auth()->user()->createPersona([
'name' => 'Компанійний адміністратор',
'context' => [
'role' => 'admin',
'company_id' => 123,
'permissions' => ['read', 'write', 'delete']
]
]);
// Перемикання на іншу персону
auth()->user()->switchToPersona($persona);
Цей пакет буде корисним для SaaS-додатків з багатьма орендарями, де користувачі можуть змінювати контексти компаній, управлінські ролі та більш складні налаштування доступу. Наведений нижче код є прикладом з документації пакету, що демонструє створення персон для різних компаній:
// Користувач перемикається між компаніями
$companyA = $user->createPersona([
'name' => 'Адміністратор Acme Corp',
'context' => [
'company_id' => 1,
'role' => 'admin',
'permissions' => ['manage_users', 'view_reports']
]
]);
$companyB = $user->createPersona([
'name' => 'Користувач TechStart',
'context' => [
'company_id' => 2,
'role' => 'user',
'permissions' => ['view_dashboard']
]
]);
📖 Щоб дізнатися більше про цей пакет, ознайомтеся з посібником з установки.
💻 Вихідний код доступний на GitHub за посиланням Grazulex/laravel-multipersona.