From bd767b7e32581de53ffadee9f770f4f14e865d87 Mon Sep 17 00:00:00 2001 From: enlineawork Date: Tue, 8 Sep 2026 07:35:08 -0300 Subject: [PATCH] fix(f4): hide SMTP controls outside system admin --- web-v2/src/pages/DocumentDeliveryPage.tsx | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/web-v2/src/pages/DocumentDeliveryPage.tsx b/web-v2/src/pages/DocumentDeliveryPage.tsx index 9c26fe9..275a41c 100644 --- a/web-v2/src/pages/DocumentDeliveryPage.tsx +++ b/web-v2/src/pages/DocumentDeliveryPage.tsx @@ -41,8 +41,9 @@ function defaultPort(mode: SmtpSecurityMode): number { } export function DocumentDeliveryPage() { - const { hasPermission } = useAuth(); + const { hasPermission, user } = useAuth(); const canManage = hasPermission('document_delivery.manage'); + const canSmtpAdmin = Boolean(user?.roles.includes('admin')); const [settings, setSettings] = useState(null); const [smtp, setSmtp] = useState(null); const [items, setItems] = useState([]); @@ -79,7 +80,7 @@ export function DocumentDeliveryPage() { const [currentSettings, outbox, smtpSettings] = await Promise.all([ getDocumentDeliverySettingsF4(), listDocumentDeliveriesF4(), - canManage ? getSmtpSettings() : Promise.resolve(null), + canSmtpAdmin ? getSmtpSettings() : Promise.resolve(null), ]); setSettings(currentSettings); setOfficeEmail(currentSettings.officeEmail ?? ''); @@ -89,7 +90,7 @@ export function DocumentDeliveryPage() { useEffect(() => { load().catch((requestError) => setError(errorMessage(requestError))).finally(() => setLoading(false)); - }, [canManage]); + }, [canSmtpAdmin]); const saveOffice = async (event: FormEvent) => { event.preventDefault(); @@ -104,7 +105,7 @@ export function DocumentDeliveryPage() { const saveSmtp = async (event: FormEvent) => { event.preventDefault(); - if (!host.trim() || !fromName.trim() || !fromEmail.trim()) return; + if (!canSmtpAdmin || !host.trim() || !fromName.trim() || !fromEmail.trim()) return; setSaving(true); setError(''); setSuccess(''); try { const input: Parameters[0] = { @@ -129,7 +130,7 @@ export function DocumentDeliveryPage() { const sendTest = async (event: FormEvent) => { event.preventDefault(); - if (!testEmail.trim()) return; + if (!canSmtpAdmin || !testEmail.trim()) return; setSaving(true); setError(''); setSuccess(''); try { const result = await testSmtpSettings(testEmail.trim()); @@ -151,7 +152,7 @@ export function DocumentDeliveryPage() { if (loading) return ; return
-
SUPERADMIN · CORREO

Entrega documental

Configuración institucional de SMTP, destinatarios y trazabilidad de los envíos automáticos.

{canManage && }
+
ENTREGA DOCUMENTAL

Correo y envíos

Destinatarios institucionales, trazabilidad de envíos y configuración técnica de correo reservada al Superadmin.

{canManage && }
{error && {error}}{success && {success}}
@@ -163,9 +164,9 @@ export function DocumentDeliveryPage() {
- {canManage &&
+ {canSmtpAdmin &&
-
SALIDA DE EMAIL

Servidor SMTP

La contraseña se cifra en el servidor con AES-256-GCM. Al volver a esta pantalla sólo se informa si existe una clave guardada; nunca se devuelve su contenido.

+
SUPERADMIN · SALIDA DE EMAIL

Servidor SMTP

La contraseña se cifra en el servidor con AES-256-GCM. Al volver a esta pantalla sólo se informa si existe una clave guardada; nunca se devuelve su contenido.

{smtp?.source === 'ENVIRONMENT' && Actualmente se está usando la configuración del servidor. Al guardar este formulario, la configuración de base de datos administrable pasará a tener prioridad.}
@@ -182,7 +183,9 @@ export function DocumentDeliveryPage() {
} - {canManage &&

Probar configuración

Envía un correo real con un archivo de prueba usando exactamente la configuración activa.

} + {canSmtpAdmin &&

Probar configuración

Envía un correo real con un archivo de prueba usando exactamente la configuración activa.

} + + {!canSmtpAdmin &&

SMTP reservado al Superadmin. Los usuarios operativos pueden consultar la trazabilidad y, según permisos, gestionar entregas, pero no ver ni modificar credenciales de correo.

}
TRAZABILIDAD

Últimas entregas

Actas PDF a Empresa/Oficina/Inspector e INF Word editable al Inspector responsable.

{items.length}