Files
agenciapsilmno/src/composables/useAuth.js
T

84 lines
2.4 KiB
JavaScript

/*
|--------------------------------------------------------------------------
| Agência PSI
|--------------------------------------------------------------------------
| Criado e desenvolvido por Leonardo Nohama
|
| Tecnologia aplicada à escuta.
| Estrutura para o cuidado.
|
| Arquivo: src/composables/useAuth.js
| Data: 2026
| Local: São Carlos/SP — Brasil
|--------------------------------------------------------------------------
| © 2026 — Todos os direitos reservados
|--------------------------------------------------------------------------
*/
/**
* ---------------------------------------------------------
* useAuth()
* ---------------------------------------------------------
*
* Stack do projeto:
* - Vue 3 (Composition API)
* - PrimeVue (UI)
* - Supabase (Auth + Database)
*
* Responsabilidade:
* Camada global de AUTENTICAÇÃO baseada no Supabase.
*
* O que este composable faz:
* - Obtém a sessão atual do Supabase (auth.getSession)
* - Mantém o estado reativo do usuário autenticado
* - Escuta mudanças de autenticação (login, logout, refresh de token)
* - Expõe apenas a identidade do usuário (user)
*
* O que ele NÃO faz:
* - Não controla permissões
* - Não valida roles
* - Não decide acesso a telas ou botões
* - Não aplica regras de plano (Free/Pro)
*
* Conceito arquitetural:
* Este arquivo trata apenas de IDENTIDADE (Auth).
*
* Auth → "Quem é o usuário autenticado?"
* AuthZ → "O que esse usuário pode acessar ou executar?"
*
* A AUTORIZAÇÃO deve ser tratada em outra camada,
* como por exemplo:
* - useAuthz()
* - tenantStore (membership.role)
* - entitlementsStore (features do plano)
*
* Observação importante:
* O role do usuário NÃO vem do Supabase Auth.
* Ele é definido na tabela de membership (multi-tenant).
*
* Portanto:
* Nunca utilizar apenas `user` para controle de acesso.
*
* Esse composable é apenas a base de identidade do sistema.
*/
import { ref, onMounted } from 'vue';
import { supabase } from '@/lib/supabase/client';
const user = ref(null);
export function useAuth() {
const init = async () => {
const { data } = await supabase.auth.getSession();
user.value = data.session?.user || null;
};
supabase.auth.onAuthStateChange((_, session) => {
user.value = session?.user || null;
});
onMounted(init);
return { user };
}