Nuevas Características
Modo Clúster
La versión empresarial soporta despliegue en modo clúster mediante plugins específicos, permitiendo que la aplicación se ejecute en múltiples instancias para mejorar el manejo de accesos concurrentes y aprovechar múltiples núcleos de CPU. Consulta la documentación para despliegue en clúster.
Política de Contraseñas
Se pueden estableecr reglas para contraseñas de todos los usuarios, incluyendo validez temporal y estrategias de seguridad para inicio de sesión, así como gestión de cuentas bloqueadas. Más información en política de contraseñas y bloqueo de usuarios.
Política de Seguridad para Tokens
Esta característica protege el sistema mediante configuraciones como "duración de sesión", "ciclo de vida del token" y "periodo de gracia para renovación de tokens expirados". Detalles en la documentación de política de tokens.
Restricción por IP
Los administradores pueden definir listas blancas o negras de IPs para restringir conexiones no autorizadas o bloquear direcciones maliciosas, con posibilidad de consultar registros de accesos denegados para identificar riesgos. Referencia: restricción por IP.
Variables y Secretos
Proporciona configuración centralizada para variables de entorno y secretos, útil para almacenar datos sensibles, reutilizar configuraciones y aislar entornos. Guía en gestión de variables y secretos.
Gestión de Migraciones
Facilita la migración de configuraciones de aplicaciones entre diferentes entornos, con herramientas para publicación y control de cambios. Documentación disponible en gestión de migraciones y gestión de versiones.
Administración de Rutas
- Datos de menú independientes y renombrados a rutas: La información de menú se separó de UI Schema y se denomina ahora "rutas", almacenada en tablas como
desktopRoutesymobileRoutespara dispositivos de escritorio y móviles respectivamente. - Optimización del frontend con soporte para colapso y respuesta: El menú ahora se adapta de manera responsiva y permite colapsar, mejorando la experiencia de usuario. Ver gestión de rutas.
Roles y Permisos
Se añadió soporte para configurar permisos en más acciones, como diálogos, enlaces, escaneos y disparadores de workflows, además de permisos para pestañas dentro de la interfaz.
Gestión de Usuarios
Los perfiles de usuario ahora son configurables mediante formularios personalizados para datos individuales.
Flujos de Trabajo (Workflows)
Se incorporó un centro de tareas pendientes en la barra de herramientas global, mostrando en tiempo real la cantidad de nodos manuales y aprobaciones pendientes. Otras mejoras incluyen:
- Eventos de operación personalizados: Soporte para disparar eventos globales y por lotes de datos.
- Aprobaciones: Funcionalidades como reasignación, adición de revisores, edición de contenido durante la aprobación, configuración de bloques de información básica, y optimización de interfaces de solicitud y pendientes, integradas en el centro global de tareas.
Nodo de Mapeo de Variables JSON en Workflows
Un nuevo nodo especializado para convertir datos JSON de nodos anteriores en variables mapeadas. Ejemplo en documentación de mapeo JSON.
Mejoras en Capacidades de Extensión y Ejemplos de Plugins
| Extensión | Ejemplo de Plugin |
|---|---|
| Campos predefinidos en tablas de datos | @nocobase-sample/plugin-data-source-main-custom-preset-fields |
| Opciones de campo de color para calendarios | @nocobase-sample/plugin-calendar-register-color-field |
| Opciones de campo de título para calendraios | @nocobase-sample/plugin-calendar-register-title-field |
| Extensión de campo de expresión para fórmulas | @nocobase-sample/plugin-field-formula-register-expression-field |
| Extensión de campo de agrupación para tableros kanban | @nocobase-sample/plugin-kanban-register-group-field |
| Extensión de operadores de filtrado | @nocobase-sample/plugin-register-filter-operator |
| Extensión de almacenamiento de archivos | @nocobase-sample/plugin-file-storage-demo |
Cambios Incompatibles
Actualización de Política de Seguridad para Tokens
En la versión 1.6, si la autenticación de Auth no se aprueba, se devuelve un error 401 y se redirige a la página de inicio de sesión, un comportamiento diferente a versiones anteriores. Para omitir esta verificación, sigue estos ejemplos ajustados:
Solicitud Frontend
useRequest({
path: '/api/informacion',
omitAuth: true,
});
apiClient.request({
path: '/api/informacion',
omitAuth: true,
});
Middleware Backend
class AuthBypassPluginServer extends plugin {
bypassAuthentication = (ctx, next) => {
if (ctx.route === '/ruta/especifica') {
ctx.disableAuthCheck = true;
}
await next();
};
async load() {
this.app.dataSourceManager.onDataSourceAdded((ds) => {
ds.resourceManager.apply(this.bypassAuthentication, {
before: 'auth',
});
});
}
}
Función de Prueba unitaria agent.login Ahora es Asíncrona
Debido a operaciones asincrónicas en el flujo de autenticación, la función de prueba login cambió a asincrónica. Ejemplo modificado:
import { createTestServer } from '@nocobase/test';
describe('Suite de pruebas de autenticación', () => {
let server;
let client;
beforeEach(async () => {
server = await createTestServer({
registerActions: true,
acl: true,
plugins: ['users', 'auth', 'acl'],
});
client = await server.agent().authenticate(1);
});
it('debería manejar solicitudes autenticadas', async () => {
await client.get('/api/recursos');
await client.post('/api/recursos');
await client.resource('recursos').create();
});
});
Nueva API para Configuración del Centro de Usuario
Se introduce una API actualizada para extender la configuración del perfil de usuario:
type OpcionesItemConfigUsuario = SchemaSettingsItemType & { snippetAcl?: string };
class Application {
addConfigItemUsuario(options: OpcionesItemConfigUsuario);
}
Ejemplo de implementación con nombres de variables y clases alterados:
class PluginConfigPerfilCliente extends plugin {
async load() {
this.app.addConfigItemUsuario({
key: 'nombreMostrado',
Component: WidgetNombreMostrado,
orden: 2,
});
}
}