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:
@@ -20,7 +20,15 @@ async function requireAgency() {
|
|||||||
data: { user },
|
data: { user },
|
||||||
} = await supabase.auth.getUser();
|
} = await supabase.auth.getUser();
|
||||||
if (!user || !isAgencyRole(userRole(user))) {
|
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()) {
|
if (!superhumanConfigured()) {
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -74,6 +74,7 @@ export async function GET() {
|
|||||||
portfolioWide: false,
|
portfolioWide: false,
|
||||||
tenantId,
|
tenantId,
|
||||||
entries,
|
entries,
|
||||||
|
isAgency: agency,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ type Payload = {
|
|||||||
tenantId?: string;
|
tenantId?: string;
|
||||||
hint?: string;
|
hint?: string;
|
||||||
entries: Entry[];
|
entries: Entry[];
|
||||||
|
isAgency?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
function typeLabel(t: string) {
|
function typeLabel(t: string) {
|
||||||
@@ -237,6 +238,7 @@ export default function SeguimientoBoard() {
|
|||||||
<Send className="w-3.5 h-3.5" />
|
<Send className="w-3.5 h-3.5" />
|
||||||
{noteBusy ? 'Guardando…' : 'Añadir al seguimiento'}
|
{noteBusy ? 'Guardando…' : 'Añadir al seguimiento'}
|
||||||
</button>
|
</button>
|
||||||
|
{data.isAgency ? (
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
disabled={syncBusy || !data.tenantId}
|
disabled={syncBusy || !data.tenantId}
|
||||||
@@ -250,6 +252,7 @@ export default function SeguimientoBoard() {
|
|||||||
)}
|
)}
|
||||||
Traer notas Superhuman
|
Traer notas Superhuman
|
||||||
</button>
|
</button>
|
||||||
|
) : null}
|
||||||
{noteMsg ? (
|
{noteMsg ? (
|
||||||
<p className="text-xs text-emerald-700">{noteMsg}</p>
|
<p className="text-xs text-emerald-700">{noteMsg}</p>
|
||||||
) : null}
|
) : null}
|
||||||
|
|||||||
@@ -97,7 +97,13 @@ export async function middleware(req: NextRequest) {
|
|||||||
|
|
||||||
if (user && role === 'client' && path.startsWith('/api/admin/')) {
|
if (user && role === 'client' && path.startsWith('/api/admin/')) {
|
||||||
return withSecurityHeaders(
|
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 }
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user