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() {
{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 } + ) ); }