Ajuste usuarios - Inicio agenda

This commit is contained in:
Leonardo
2026-02-23 18:57:40 -03:00
parent 89b4ecaba1
commit b1c0cb47c0
11 changed files with 2244 additions and 576 deletions

View File

@@ -25,19 +25,38 @@ const { layoutState } = useLayout()
const tenantStore = useTenantStore()
const entitlementsStore = useEntitlementsStore()
const tenantId = computed(() => tenantStore.activeTenantId || null)
/**
* ✅ Role canônico pro MENU:
* - Prioriza o role do tenant (mesma fonte usada pelo router guard)
* - Faz fallback pro sessionRole (ex.: telas fora de tenant)
* - PRIORIDADE 1: contexto de rota (evita menu errado quando role do tenant atrasa/falha)
* Ex.: /therapist/* => força menu therapist; /admin* => força menu admin
* - PRIORIDADE 2: se há tenant ativo: usa role do tenant
* - PRIORIDADE 3: fallback pro sessionRole (ex.: telas fora de tenant)
*
* Motivo: o bug que você descreveu (terapeuta vendo admin.menu) geralmente é:
* - tenant role ainda não carregou OU tenantId está null
* - sessionRole vem como 'admin'
* Então, rota > tenant > session elimina o menu “trocar sozinho”.
*/
const navRole = computed(() => {
return tenantStore.activeRole || sessionRole.value || null
const p = String(route.path || '')
// ✅ blindagem por contexto
if (p.startsWith('/therapist')) return 'therapist'
if (p.startsWith('/admin') || p.startsWith('/clinic')) return 'clinic_admin'
if (p.startsWith('/patient')) return 'patient'
// ✅ dentro de tenant: confia no role do tenant
if (tenantId.value) return tenantStore.activeRole || null
// ✅ fora de tenant: fallback pro sessionRole
return sessionRole.value || null
})
const model = computed(() => {
// ✅ fonte correta: tenant role (clinic_admin/therapist/patient)
// fallback: profiles.role (admin/therapist/patient)
const effectiveRole = tenantStore.activeRole || sessionRole.value
// ✅ role efetivo do menu já vem “canônico” do navRole
const effectiveRole = navRole.value
const base = getMenuByRole(effectiveRole, { isSaasAdmin: sessionIsSaasAdmin.value }) || []
@@ -52,8 +71,6 @@ const model = computed(() => {
return [...base].sort((a, b) => priorityOrder(a) - priorityOrder(b))
})
const tenantId = computed(() => tenantStore.activeTenantId || null)
// quando troca tenant -> recarrega entitlements
watch(
tenantId,
@@ -64,7 +81,7 @@ watch(
{ immediate: true }
)
// ✅ quando troca role efetivo do menu (tenant role / session role) -> recarrega entitlements do tenant atual
// ✅ quando troca role efetivo do menu (via rota/tenant/session) -> recarrega entitlements do tenant atual
watch(
() => navRole.value,
async () => {