2026-01-18_actor-context-switcher
Documentação KOLOS

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.