diff --git a/src/app/api/admin/superhuman/sync/route.ts b/src/app/api/admin/superhuman/sync/route.ts index 1f498b9..d9680ab 100644 --- a/src/app/api/admin/superhuman/sync/route.ts +++ b/src/app/api/admin/superhuman/sync/route.ts @@ -20,7 +20,15 @@ async function requireAgency() { data: { user }, } = await supabase.auth.getUser(); if (!user || !isAgencyRole(userRole(user))) { - return { error: NextResponse.json({ error: 'Forbidden' }, { status: 403 }) }; + return { + error: NextResponse.json( + { + error: + 'Forbidden: sincronizar Superhuman requiere rol agencia (admin/team).', + }, + { status: 403 } + ), + }; } if (!superhumanConfigured()) { return { diff --git a/src/app/api/seguimiento/route.ts b/src/app/api/seguimiento/route.ts index 7c1dd78..4328613 100644 --- a/src/app/api/seguimiento/route.ts +++ b/src/app/api/seguimiento/route.ts @@ -74,6 +74,7 @@ export async function GET() { portfolioWide: false, tenantId, entries, + isAgency: agency, }); } diff --git a/src/components/SeguimientoBoard.tsx b/src/components/SeguimientoBoard.tsx index 7da893e..be3eb4e 100644 --- a/src/components/SeguimientoBoard.tsx +++ b/src/components/SeguimientoBoard.tsx @@ -33,6 +33,7 @@ type Payload = { tenantId?: string; hint?: string; entries: Entry[]; + isAgency?: boolean; }; function typeLabel(t: string) { @@ -237,19 +238,21 @@ export default function SeguimientoBoard() { {noteBusy ? 'Guardando…' : 'Añadir al seguimiento'} - + {data.isAgency ? ( + + ) : null} {noteMsg ? (

{noteMsg}

) : null} diff --git a/src/middleware.ts b/src/middleware.ts index afb56bb..9e87f08 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -97,7 +97,13 @@ export async function middleware(req: NextRequest) { if (user && role === 'client' && path.startsWith('/api/admin/')) { return withSecurityHeaders( - NextResponse.json({ error: 'Forbidden' }, { status: 403 }) + NextResponse.json( + { + error: + 'Forbidden: solo usuarios agencia (admin/team) pueden usar esta acción. Entra con marketing@4ventures.es.', + }, + { status: 403 } + ) ); }