Si llevas tiempo desarrollando en Odoo, la estructura del ir.model.access.csv es memoria muscular. En Odoo 20, esto cambia de forma radical. La clásica matriz de booleanos para el CRUD desaparece a favor de un modelo normalizado.
El antes y el después
Odoo 19 y anteriores:
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
Odoo 20:
id,name,model_id,group_id/id,operation,domain
Lo que este diff implica a nivel arquitectónico:
Normalización del CRUD: Ya no defines los cuatro permisos en una sola línea con 1 o 0. Ahora declaras explícitamente la operación. A nivel de ORM y base de datos es más limpio y escalable, aunque nos obligará a desdoblar los CSV actuales línea por línea.
Fusión de Access Rights y Record Rules: Esto es lo más potente de la actualización. La inclusión del campo domain directamente en esta estructura apunta a que Odoo está unificando la seguridad. Aplicar restricciones granulares (como permitir lectura global, pero escritura solo sobre registros propios) se gestionará desde un único punto, reduciendo la fragmentación histórica entre ir.model.access y ir.rule.
Cambio de sintaxis en External IDs: El paso de la notación :id (como en group_id:id) a /id o directamente al nombre del campo, indica una estandarización en cómo el framework procesa los identificadores relacionales durante el parsing de los CSV.