metis-desk/docs/auditorias/workplace-node-actions/01-inventario-entidades-acciones.md

7.3 KiB

WD04.5 — Inventario de entidades y acciones

Auditoría previa a la implementación. Se contrastaron el modelo real, consumidores web, controladores, servicios HTTP y reglas del servidor. La existencia de una ruta por sí sola no autoriza una entrada del menú.

Nodos e identidades

Nodo Entidad representada Identificador Componente Navegación actual
Principal Asset miembro señalado por Workstation.computerAssetId React Flow asset:<UUID>; Asset.id distinto del ID de Workstation WorkplaceEquipmentNode / WorkplaceEquipmentCard /companies/:companyId/assets/:assetId
Asociado Asset en Workstation.assetIds; no prueba una conexión física asset:<UUID> Mismos componentes, principal=false Ficha de Asset si está resuelto en la compañía
Software SoftwareInstallation del principal validado; Resource es una referencia diferente software:<installationId>; values.resourceId identifica producto, values.licenseResourceId licencia WorkplaceSoftwareNode / WorkplaceSoftwareCard softwareReferenceHref: ficha particular, aplicación global o SO global
Añadir activo Acción de vista, sin entidad presentation:add-asset WorkplaceAddAssetNode WorkstationAssetAddDialog
Rótulo de software Presentación, sin entidad presentation:software-heading WorkplaceSoftwareHeadingNode Ninguna
Leyenda Presentación fuera del canvas No tiene nodo persistido WorkplaceMapLegend Ninguna

Fuentes: workplace-map-model.ts, workstation-equipment.ts, current-operating-systems.ts, use-workplace-map-model.ts, workplace-map-layout.ts, bajo las operaciones actuales de Companies. La misma tarjeta se usa en React Flow y WorkplaceCompactMap.

Asset

  • Consultar: AssetDetailPage, ruta de entidad real y contexto de compañía. useAssetDetailPageController lee inventario/catálogo; no cambia el activo.
  • Editar: AssetEditorDialog → AssetForm → useAssetFormController → saveAsset → POST /api/assets/:companyId/:id/update. Plantilla fija al editar, schema existente, validación de referencias/estado y revisiones del agregado. Puede editar un activo retirado según sus restricciones actuales. Un activo asignado no puede retirarse vulnerando ASSET_ASSIGNED. Invalida inventoryKeys.company(companyId) y las conexiones remotas de esa compañía.
  • Historial: pestaña de AssetDetailContent → AssetHistory. Reutiliza TimeLine, revisiones, relaciones, infraestructura y soporte. Lecturas /api/assets/:companyId, /api/asset-infrastructure/:companyId y /api/asset-support/:companyId/:assetId. Se admite un contenedor modal propio de Assets sobre este contenido, sin duplicar el historial.
  • Estado técnico: campo del formulario real de edición, no operación rápida independiente confirmada.
  • Composición: pertenece a Workstation. WorkstationEditorDialog → WorkstationForm → saveWorkstation → POST /api/assets/:companyId/workstations/:id/update, con If-Match de revisión. Retirar miembros y elegir principal se realizan allí, conservando validaciones, reservas, historial y recuperación de conflictos.
  • Borrado físico: AssetDetailPage → DeleteAssetDialog, confirmación y repositorio; no equivale a retirar del puesto. Se excluye del mapa por su contexto de miembros actuales y por no ampliar operaciones destructivas.

Principal y soporte

La ficha ya abre WorkstationSoftwareDialog → SoftwareInstallationsPanel para el principal. No se habilita «Gestionar software» en un periférico por su categoría o nombre.

AssetSupportOverview abre AssetSupportManagementDialog → AssetSupport, también disponible en AssetDetailContent. La gestión corresponde al Asset, no al contexto remoto de una persona. retired restringe el alta/edición conforme al consumidor existente; las confirmaciones de soporte se conservan dentro de ese panel. Lectura y escrituras de /api/asset-support/:companyId/:assetId; caché supportKeys.asset(companyId,assetId).

Cambiar o retirar el principal se conduce al editor del puesto. Las instalaciones y perfiles siguen unidos a su activo; no se trasladan ni se eliminan desde el mapa.

SoftwareInstallation y Resource

SoftwareInstallationsPanel utiliza SoftwareInstallationEditorDialog → SoftwareInstallationForm → softwareApi.save → POST /api/software-installations/:companyId/:id/update, con contrato Resources 3, CSRF, origen y sesión. La pareja activo/producto es inmutable. El formulario permite únicamente las transiciones de SOFTWARE_STATE_TRANSITIONS, versión, notas y licencia disponible. Los terminales removed y never_configured no se editan y no aparecen en el mapa ordinario. La disponibilidad del activo/recurso y la unicidad de la instalación abierta se validan en mapSoftwareInput y el repositorio transaccional.

SoftwareHistoryDialog muestra las revisiones de esa instalación. No existe una ficha independiente de instalación confirmada: no se inventa una ruta para ella. El borrado existente elimina instalación y revisiones mediante DeleteRecordDialog; se excluye de esta incorporación contextual. No elimina Resource.

SoftwareInstallationForm invalida la consulta de instalaciones de la compañía, referencias de software, capacidades y candidatos afectados. Las opciones de producto y licencia se obtienen del mismo inventario/catálogo y referencias que el panel existente; la adaptación común extraída es softwareInstallationOptions, compartida por el panel y el acceso contextual.

El producto se consulta con softwareReferenceHref, a partir de su referencia validada: /companies/:companyId/resources/:id, /catalogs/global-applications/:id o el href público de SO global. Las licencias son recursos particulares y solo se ofrece su ficha cuando está resuelta en la compañía.

Autenticación, autorización, estado y gates

Assets, Workstation y SoftwareInstallation usan el guard público requireAuthenticated conectado en createIdentityRuntime; no existe RBAC granular de edición de estas tres operaciones. Se verificó el guard, no se infirió autorización del simple hecho de que exista sesión. El servidor sigue comprobando compañía, referencias y dominio. El frontend oculta operaciones mutables ante consulta denegada/error o contexto inconsistente; no sustituye al guard.

La administración global utiliza otro guard, requireGlobalResourceManager, y autorización de Identity. No se reutiliza ni se deriva de poder editar instalaciones. Ningún menú del mapa modifica productos globales, plantillas, actividad o catálogo.

Los gates de selección/asociación de Resources no equivalen a permiso administrativo. useResourceApplicationReferences resuelve usos existentes, incluidos inactivos, sin depender del gate de altas. Editar una instalación existente no crea una asociación nueva ni cambia su producto. Si falla la resolución se conserva la instalación y su historial; se omite navegación a un producto desconocido. El servidor conserva los gates y la compatibilidad del contrato 3, incluidos SO globales. No se modifican estos contratos.

Fuentes de seguridad: identity-runtime.ts, require-authenticated.ts, software-installation.routes.ts, software-installation-input.mapper.ts, resource-reference-reader.ts, resource-application.routes.ts, use-resource-application-references.ts y los contratos de Resources Global Scope y del catálogo global de SO.