Todo lo que necesita saber sobre el filtrado de db en Odoo
8 agosto, 2020 por
Todo lo que necesita saber sobre el filtrado de db en Odoo
Administrator

En primer lugar, eche un vistazo a la documentación oficialdel despliegue, que tiene un buen párrafo de introducción sobre el filtrado de base de datos.

Odoo es un sistema multiinquilino: un solo sistema Odoo puede ejecutar y servir a una serie de instancias de base de datos.

Ejemplos

Tomemos algunos ejemplos para ilustrar cómo funciona el código:

dbfilter es una expresión regex que se crea dinámicamente: puede utilizar variables y adaptar su contenido en función del encabezado HOST de la solicitud http.%d%h

Concreto:

Por lo tanto, si define , un usuario que acceda tendrá acceso a bases de datos que coincidan, por ejemplo:dbfilter = ^%d.*\Zhttps://demo.example.com^demo.*\Z

  • demo
  • demo_backup_20180404

Cuidado

re.match se utiliza: dbs = [i for i in dbs if re.match(r, i)]

Así que es fácil escribir un regex más permisivo de lo esperado. Si define, por ejemplo, también coincidirá con .dbfilter = demo_*demoinefromage_prod

dbfilter_from_header Módulo

No siempre puede hacer coincidir los nombres de las bases de datos con los nombres de dominio.

Por ejemplo, puede tener una única instancia de Odoo para servir 2 bases de datos:

  • customer1_prod
  • customer2_prod

Pero cada uno de estos clientes quiere su propio dominio personalizado, respectivamente:

  • https://back.customer1.com
  • https://app.customer2.com

Para admitir este caso, puede utilizar el módulo dbfilter_from_header de OCA.

Instalación

$ git clone https://github.com/OCA/server-tools -b 9.0 --no-checkout --single-branch --depth 1
$ cd server-tools
$ git config core.sparsecheckout true
$ echo "dbfilter_from_header" > .git/info/sparse-checkout
$ git read-tree -mu HEAD

Configuración

En el lado de Nginx, debe definir un dedicado para cada host virtual.dbfilter

En nuestro caso, para:https://back.customer1.com

server_name back.customer1.com;

(...)

location / {

(...)

    proxy_set_header X-Odoo-dbfilter ^customer1_.*\Z;

2 cosas a tener en cuenta:

  • antes de pasar la solicitud a Odoo, Nginx toma todos los encabezados HTTP, los pone en minúsculas y convierte guiones en guiones bajos;
  • usamos en lugar de hacer coincidir el final de la cadena, porque nginx no puede escapar $ \Z$

2 niveles de filtrado

dbfilter_from_header respeta lo definido a nivel de Odoo, por lo que podemos configurar 2 niveles de filtrado:dbfilter

  • dbfilter = ^.+prod.*$
  • proxy_set_header X-Odoo-dbfilter ^.*customer1.*\Z;

.