KamoCRM

Org-scope RetailService y ****************

Fixkamo-shared-library
Se descapó
23 de septiembre de 2026 a las 12:42 UTC
Autor
Kamo
Compromit
19505fa

Cada manejador get/update/delete-by-uid bajo CommerceMarketController's retail sub-recursos (categorías, marcas, atributos/valores, imágenes, variantes, etiquetas, opiniones, clientes, niveles de clientes, clases/zonas/tarifas de impuestos, descuentos, precio listas/ingresos, tarjetas de regalo, ubicaciones, niveles/ajustes de existencias, envío zonas/métodos, transportistas, envíos, carritos/artículos de cart, giros, orden notas) resolvió la fila a través de un hallazgo desnudoById(uid)/deleteById (uid), sin comprueba que la fila pertenecía a la organización del llamante. Cualquier autenticado un miembro de cualquier org podría leer, editar o eliminar las filas de otra organización por adivinar o enumerar un uid - para los clientes (sequential Largo ids) esto era una filtración de nombre, correo electrónico y gasto de PII; para tarjetas de regalo, niveles de existencias y carrito Totaliza que fue el acceso a las cifras de dinero y inventario de otro inquilino. getMarketVendors tenía la misma brecha: sus hermanos POST/PUT/DELETE ya resolvió el mercado a través de findByIdAndOrganizationId, pero el GET no lo hizo. Corregido por enhebrar orgId en cada uno de estos miradas: - Entidades con su propia columna de organización (la mayoría de ellas) ahora resuelven a través de un nuevo método de repositorio de findByUidAndOrganizationId, reflejando la existente ************* patrón (una "Canería explícita", ya que el campo de identificación de estas entidades es "uid", no es "id"). - Entidades sin columna de organización propia (imágenes/variantes del producto a través de su producto, valores de atributos a través de su atributo, artículos de carrito a través de su carrito, entradas de lista de precios a través de su lista de precios) se visúan a través de un nueva ****************ud*** pregunta uniéndose a la org de los padres. - Un puñado de cronoclaves de creación de crono extranjeros tomados literalmente del órgano de solicitud (un iludio de mercado, una categoría matriz id, un nivel de identificación del cliente, una zona/clase fiscal, una imagen/variante de enlace cruzado, transportista/localización de un envío, un borrador La dirección guardada del pedido) obtuvo el mismo aspecto de org-scoped, cerrando lo mismo clase de brecha en el momento de la escritura, no sólo en la lectura/actualización/borrar. - lookupMarket y el nuevo lookOffering(id, orgId) sobrecarga descarga esto para cada manejador de creación que anteriormente los llamaba unscopio. - getMarketVendors ahora resuelve su mercado a través de findByIdAndOrganizationId antes de enumerar vendedores, coincidir con sus propios hermanos. En todos los casos una fila de or en el extranjero ahora responde exactamente como una que falta: la misma excepción, mismo mensaje, la misma respuesta HTTP que el manejador ya ha producido para una mala uid - ninguna nueva información es filtrada por la solución misma. Asignación masiva: updateGiftCard ya no acepta la corrienteBalance de la Solicitar cuerpo. No existe el RoleRightType (MANAGE-PRICING, MANAGE-ORDERS, ...) cubre claramente el ajuste manual del equilibrio, por lo que según la posición del coordinador instrucción no inventamos una; un miembro del mismo-org todavía puede editar el cartas es otros campos exactamente como antes. Nota para el coordinador: kamo-internal's MarketDiscountsTab.tsx gift-card diálogo de edición envía actualBalance hoy y ese campo ahora será ignorado silenciosamente - un ajuste-balance dedicado endpoint (espejo /stock-levels/-uid-/ajuste) detrás de su propio derecho es el arreglar derecho y necesita una decisión de producto, no una nueva pieza unilateral de RoleRightType. También fijo en la entrada mientras se vuelve a conducir estas firmas: createShipment leyó orderId desde el lugar equivocado (el controlador pasaba orgId posicionalmente donde el ordenId pertenecía; la UI siempre envía ordenId en el Carrocería Mensaje) - ahora lee ordenId del cuerpo, que es lo que cada llamador Ya envía. Esta es una solución funcional, no una de seguridad. Pruebas: RetailServiceOrgScopingTest y ******************* cubrir un recurso representativo por patrón de repositorio (columna de org, via-maparenta se une) con una lectura/actualización/borrar extranjera que falla sin la solución y una llamada del mismo-org que tiene éxito, más la masa de la tarjeta de regalo- Regla de asignación. Controlado por mutación: revirtiendo las búsquedas para encontrarById hizo Las nueve pruebas de "orga del extranjero" fallan en rojo; restauradas antes de comprometerse.

Todos los cambios

Como lo que ves enviaste?

Todo llega a su espacio de trabajo por sí solo. Comience en el plan gratuito y lea esta página de nuevo en un mes.

Arranzar gratis para siempreVer Precios