fix: Superhuman sync solo agencia — mensaje claro y botón oculto a cliente

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
4Ventures
2026-09-28 18:05:17 +02:00
parent c0707ffc1b
commit 990915a051
4 changed files with 33 additions and 15 deletions

View File

@@ -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 {

View File

@@ -74,6 +74,7 @@ export async function GET() {
portfolioWide: false,
tenantId,
entries,
isAgency: agency,
});
}

View File

@@ -33,6 +33,7 @@ type Payload = {
tenantId?: string;
hint?: string;
entries: Entry[];
isAgency?: boolean;
};
function typeLabel(t: string) {
@@ -237,6 +238,7 @@ export default function SeguimientoBoard() {
<Send className="w-3.5 h-3.5" />
{noteBusy ? 'Guardando…' : 'Añadir al seguimiento'}
</button>
{data.isAgency ? (
<button
type="button"
disabled={syncBusy || !data.tenantId}
@@ -250,6 +252,7 @@ export default function SeguimientoBoard() {
)}
Traer notas Superhuman
</button>
) : null}
{noteMsg ? (
<p className="text-xs text-emerald-700">{noteMsg}</p>
) : null}

View File

@@ -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 }
)
);
}