Aislamiento por organización
Cada fila de datos de negocio lleva el identificador de su organización, y la base de datos (PostgreSQL) aplica políticas de seguridad a nivel de fila en cada consulta: un usuario solo puede leer y escribir las filas de su organización. La regla vive en la base de datos y no solo en la aplicación, así que se cumple también si alguien consulta la API de datos directamente.
Un usuario desactivado deja de tener acceso, y las mismas políticas se aplican a las peticiones hechas con una clave de API.
Roles y permisos
- Owner: todo lo que puede un admin y, en exclusiva, la facturación y el cambio de roles.
- Admin: gestiona el equipo, la configuración y las claves de API; puede borrar deals.
- Trader: crea y edita deals, contrapartes, contratos, cobros y reclamaciones, y exporta.
- Viewer: solo lectura; no crea, no edita y no exporta.
Los roles regulan lo que cada persona puede hacer, no lo que ve: todos los miembros de una organización, incluido un viewer, ven los mismos deals con sus precios de compra y sus márgenes. Hoy no hay permisos por campo.
Acceso y segundo factor
- Se entra con email y contraseña o con una cuenta de Google o de Microsoft.
- Cada usuario puede activar un segundo factor (TOTP) con una app de autenticación. Una vez activado, la base de datos rechaza las sesiones que no lo han superado, aunque la contraseña sea válida.
- El inicio de sesión y la recuperación de contraseña tienen límites de intentos.
Claves de API
- Solo owner y admin pueden crearlas, verlas y revocarlas.
- El secreto se muestra una sola vez, al crear la clave. Granel guarda únicamente su hash SHA-256 y un prefijo para identificarla.
- Cada clave actúa con un rol (admin, trader o viewer; nunca owner), puede tener fecha de caducidad y se revoca en cualquier momento.
- Una clave no puede leer el directorio del equipo ni los datos de facturación.
- Las claves de la API v1 son de solo lectura, con límites de peticiones por hora para cada organización y por dirección IP, y un límite propio de exportaciones.
Registro de auditoría
Las acciones registradas guardan quién, qué, cuándo y los cambios. La tabla solo admite inserciones: no existe forma, ni desde la aplicación ni desde la API de datos, de editar o borrar una entrada. Owner y admin la exportan en CSV.
Hoy quedan registradas la edición y los cambios de estado de los deals (también en acciones masivas), su duplicado, los contenedores, la liquidación, la confirmación de capturas, los cambios del equipo y las invitaciones, y la gestión de claves de API. Otras acciones de la aplicación todavía no dejan entrada.
En tránsito y en el navegador
- Todo el tráfico va por HTTPS, con HSTS.
- Todas las respuestas llevan cabeceras de seguridad: política de seguridad de contenido (CSP) y prohibición de incrustar el sitio en marcos de terceros.
- Los documentos se guardan en un almacenamiento privado, separado por organización, y se descargan con enlaces firmados que caducan a los 60 minutos.
Canales de captura
- Los mensajes de WhatsApp se aceptan solo si traen la firma de Meta (X-Hub-Signature-256) y los de Telegram solo con el token secreto de cada conexión. Ambas comprobaciones se hacen en tiempo constante, y los webhooks tienen límite de tasa.
- El texto de cada mensaje se envía a un proveedor de IA para extraer la operación, que un usuario revisa antes de crear el deal. Qué proveedores son y dónde tratan los datos está en la política de privacidad.
Datos personales y proveedores
- Subencargados y transferencias internacionales: política de privacidad.
- Plazos de conservación por categoría: tabla de conservación.
- Acuerdo de encargo del tratamiento (art. 28 RGPD): DPA, hoy en borrador pendiente de revisión legal.
- Puedes exportar tus operaciones en CSV o Excel en cualquier momento, también cuando la organización está en solo lectura.
Contacto
Para preguntas de seguridad, o para informar de una vulnerabilidad, usa el formulario de contacto. Si afecta a datos personales, escribe a privacy@granel.io.