2026-01-18_actor-context-switcher
🧭 Contexto
Usuários do KOLOS podem ter múltiplas roles (ex.: player + venue_owner).
Sem um “modo ativo”, a navegação e a UI ficam confusas ("onde estou operando agora?").
✅ Decisão
- Implementar Contexto Ativo (UX-only) com sessão:
actor.active_actor
- (reservado)
actor.active_venue_id
- Garantir que isso não substitui autorização:
- acesso continua sendo
can()/authorize() + Policies + Spatie roles/perms.
- Adicionar um Profile Switcher no menu do usuário (Flux) para alternar o ator ativo.
- Aplicar um middleware
actor_context nas rotas autenticadas para definir um default quando ausente.
- Garantir compatibilidade com Livewire: componentes sempre renderizam 1 elemento raiz (mesmo quando “não há nada a mostrar”).
- Em loops no Blade, aplicar
wire:key nos itens para evitar "component mismatches" em updates.
🛠️ Passos (comandos via Sail)
sail artisan test --filter ActorContextTest
sail artisan test
🧪 Validação
- Ao acessar uma rota autenticada, a sessão contém
actor.active_actor.
- Usuário com múltiplos papéis consegue alternar o “perfil ativo” no menu.
- A página não quebra ao renderizar o menu em cenários com apenas 1 role (o switcher fica “invisível”, mas ainda renderiza um root element válido).
- A navegação do sidebar respeita o contexto ativo (UX), mas as permissões reais continuam validadas por Policies.
📦 Impacto
- Novo:
App\Support\ActorContext.
- Novo: middleware
actor_context.
- Novo: Livewire
ActorSwitcher (menu do usuário).
- Atualizado:
x-app-shell passa a renderizar itens conforme contexto ativo.
- Novo: teste
ActorContextTest.