Seguridad y varias compañías¶
Para quién es esta guía
Para la persona que configura usuarios y para quien deba comprobar que la separación de datos realmente funciona, por ejemplo antes de una auditoría. Los usuarios del día a día normalmente no necesitan esta página.
Qué logrará: entender quién puede ver cada dato, comprobar que la separación funciona y corregir problemas de acceso cuando aparezcan.
La regla del negocio, sin tecnicismos¶
Dos compañías comparten una misma base de datos de Odoo:
- Reyder Enterprises — dirige la operación, administra las relaciones con clientes y procesa las órdenes de venta y facturas de Reyder. Un usuario que pertenece solo a Reyder ve los registros de Reyder y los equipos consignados permitidos por un acuerdo activo; no ve automáticamente todos los registros de ambas compañías.
- Axis Mobile — es propietaria de los equipos y recibe los pagos de liquidación. Debe ver solamente sus propios equipos y sus informes de liquidación como propietaria. No debe ver los nombres de los clientes de Reyder, precios de venta, números de SO ni manifiestos internos.
Esto no depende de pedirle a alguien que “no mire”. Para usuarios normales, las reglas de
registro de Odoo controlan las operaciones ORM usadas por la interfaz y la API. No son
seguridad por filas de la base de datos: SQL directo y la ejecución como SUPERUSER
pueden omitir los controles ORM, por lo que esas capacidades se reservan a administradores
de sistema de confianza y están fuera del límite de acceso de operadores.
Comparación rápida¶
| Un usuario de Axis ve | Un usuario de Reyder ve |
|---|---|
| Sus equipos (IMEI, modelo, grado y estado) | Equipos de Reyder y equipos de Axis permitidos por consignación |
| Solamente informes de liquidación de Axis como propietaria | Solamente informes de liquidación de Reyder como consignataria |
| Sus acuerdos de consignación | Sus acuerdos de consignación |
El estado reservado de sus equipos (en stock.lot), pero no el registro de la reserva |
Reservas minoristas completas, porque Reyder es la compañía que mantiene el inventario |
| Trazabilidad de sus equipos | Operaciones completas de almacén |
| — ningún nombre de cliente | Todos los datos de clientes |
| — ningún precio de venta | Todos los precios |
| — ningún número de SO | Todas las SO |
| — ningún manifiesto de Reyder | Todos los manifiestos |
Configurar correctamente a los usuarios¶
Asigne cada persona a la compañía correcta¶
Un usuario que trabaja para Axis debe pertenecer solo a Axis. Un usuario que trabaja para Reyder debe pertenecer solo a Reyder. Solamente los administradores del sistema deben pertenecer a las dos.
Abra Settings → Users & Companies → Users y edite el usuario:
- Companies — marque únicamente las compañías para las que trabaja esa persona.
- Default Company — la compañía con la que inicia sesión.
Si una persona realmente trabaja para ambas, puede pertenecer a ambas y el sistema amplía automáticamente su contexto de compañías. Pero asignar ambas compañías a todo el mundo invalida la prueba de separación.
Perfiles de prueba¶
| Tipo de cuenta | Pertenece a | Propósito |
|---|---|---|
| Administrador de ambas compañías | Ambas compañías | Administración e investigación entre compañías expresamente autorizada |
| Usuario de prueba de Axis creado por un administrador | Solo Axis Mobile | Comprobar que un usuario exclusivo de Axis no puede ver datos de Reyder |
Pruebe siempre con un perfil real de una sola compañía
Un administrador de ambas compañías no sirve para probar la separación. Pida a un administrador que prepare una cuenta de prueba aprobada que pertenezca solo a Axis, guarde su contraseña en el sistema de credenciales autorizado y nunca publique ni comparta esa contraseña en una guía.
Qué hace cumplir la separación¶
Para el acceso normal, el límite de seguridad combina reglas de registro y minimización de
datos en el modelo. Los enlaces de un solo sentido y los campos invisibles reducen la
exposición accidental, pero no son límites independientes para API o exportación ni
sustituyen los dos primeros controles. SQL directo y SUPERUSER siguen siendo capacidades
exclusivas de administración y quedan fuera de este modelo.
Capa 1 — Reglas de registro (la protección principal)¶
Las reglas de registro de Odoo filtran lecturas y escrituras ORM realizadas mediante la interfaz y API normales. El módulo añade estas reglas a las protecciones de inventario:
| Modelo | Dominio | Resultado |
|---|---|---|
| Informe de liquidación | company_id in company_ids |
Axis ve solo sus informes de propietaria; Reyder ve solo sus informes de consignataria |
| Línea de informe de liquidación | Sigue el informe principal | Las líneas solo son visibles si el usuario puede ver el informe |
| Manifiesto de equipos | company_id in company_ids |
Cada compañía ve solamente sus manifiestos |
| Acuerdo de consignación | owner in company_ids OR consignee in company_ids |
Ambas partes del acuerdo pueden verlo |
stock.lot (equipo) |
Regla especial explicada abajo | La consignataria puede ver equipos de la propietaria cuando el acuerdo está activo |
| Orden de transferencia | source OR destination in company_ids |
Ambas partes pueden verla |
| Venta minorista | company_id in company_ids |
Limitada a la compañía |
| Reserva minorista | holding_company_id in company_ids |
Solo la compañía que mantiene el inventario; la propietaria ve el estado reservado en stock.lot, no el registro de reserva |
| Asignación de equipo a línea de SO | La compañía de la SO está permitida y el equipo pertenece a una compañía permitida o es visible para una consignataria autorizada | Exige a la vez una SO permitida y una relación de propietaria/consignataria permitida |
Capa 2 — El informe de la propietaria no contiene el detalle comercial privado¶
Cuando el sistema crea un owner settlement report, omite de sus líneas el cliente, precio de venta, fecha de venta, referencia de la sales order y comisión de la consignataria. La propietaria recibe IMEI, descripción del equipo e importe adeudado: lo necesario para conciliar el pago sin exponer la información comercial de Reyder.
Capa 3 — El enlace de un solo sentido reduce exposición¶
El campo paired_report_id apunta solamente consignataria → propietaria. El informe
de la propietaria no contiene un enlace inverso hacia el informe de la consignataria. Eso
reduce la navegación normal y la exposición accidental; las reglas de registro y la
minimización de datos siguen siendo el límite de acceso.
Capa 4 — Campos ocultos para facilidad de uso y defensa adicional¶
En el formulario del informe de liquidación, sale_order_id tiene la condición
invisible="report_type == 'owner'"; por lo tanto, el campo no se muestra en la interfaz
del informe de la propietaria. Esto mantiene el formulario claro y reduce la exposición
accidental, pero la invisibilidad por sí sola nunca es un límite de seguridad para API o
exportación.
Regla de visibilidad del equipo (stock.lot)¶
El módulo reemplaza la regla estándar de stock.lot por una regla que entiende la
consignación.
Una persona puede ver un equipo si se cumple por lo menos una de estas condiciones:
company_idpertenece a su lista de compañías; es un equipo de su compañía, ocompany_idestá vacío; todavía no tiene compañía asignada, oowner_company_idpertenece a su lista de compañías; esa compañía es la propietaria, oconsignee_company_idscontiene una de sus compañías; es una consignataria autorizada por un acuerdo activo.
La cuarta regla es lo que permite que Reyder vea el inventario de Axis al activar el acuerdo Reyder–Axis y deje de verlo cuando el acuerdo termina.
Consulte Acuerdos de consignación para entender cómo un acuerdo activo habilita esa relación.
Cómo comprobar la separación manualmente¶
Haga esta prueba breve:
- Cierre la sesión.
- Inicie sesión con una cuenta de prueba exclusiva de Axis, creada por un administrador y obtenida mediante el proceso interno autorizado.
- Intente abrir Device Ops → Fulfillment → Customer Manifests. No debe ver resultados de entregas de Reyder.
- Abra Device Ops → Consignment → Settlement Reports. Debe ver solamente
referencias
SETTLE/OWN/*, nuncaSETTLE/CON/*. - Abra un informe de propietaria. No debe haber cliente, precio de venta ni número de SO.
Si cualquiera de estas pruebas muestra datos de Reyder, deténgase y escálelo como un incidente de control de acceso. La causa más común es que la cuenta de prueba también fue habilitada por error para Reyder.
Problemas comunes¶
Un usuario de Axis ve datos de Reyder
Abra Settings → Users y revise el usuario de Axis. Companies debe contener únicamente Axis Mobile. Si Reyder aparece allí, retírela. Esta es la causa más frecuente de exposición indebida.
Un administrador de ambas compañías no muestra la separación
Es el comportamiento esperado: esa cuenta tiene autorización para las dos compañías y no sirve como prueba de aislamiento. Use una cuenta de prueba de Axis creada por un administrador y limitada a una sola compañía.
Un usuario de Reyder no ve los equipos de Axis
Confirme que el acuerdo esté Active y que la fecha de hoy esté dentro de Start/End. Un acuerdo suspendido usa Reactivate, no Activate. Un acuerdo vigente actualiza la visibilidad automáticamente; si todavía falta un equipo que debería coincidir, no edite sus compañías: envíe a soporte las referencias del acuerdo y del IMEI.
Un informe de liquidación aparece en las dos compañías
Deténgase y escálelo como incidente de control de acceso. No cambie la compañía del informe, no lo elimine y no cambie su estado. Envíe a soporte la referencia del informe, la compañía activa, el perfil del usuario y una captura de lo que se veía.
Las tareas programadas se ejecutan como SUPERUSER y pueden saltarse las reglas
Correcto: SUPERUSER_ID=1 no está limitado por las reglas de registro. Esto es
intencional para las tareas programadas y procesos internos. La protección se aplica
cuando una sesión de usuario lee los datos. El sistema puede escribir registros en
ambos lados, pero las reglas siguen filtrando lo que cada usuario puede leer.
Punto de control del administrador¶
Antes de incorporar usuarios de cualquiera de las compañías, pruebe los mismos registros representativos con un perfil exclusivo de Axis, uno exclusivo de Reyder y un administrador autorizado de ambas compañías. Registre la fecha y el resultado. Los procedimientos de consola y detalles de implementación pertenecen al manual privado de ingeniería, no a esta guía para operadores.
