NXL Forge.Pendant que le marché rédige — nous livrons
Article de fond··7 min de lecture

Odoo 20 supprime les règles d'enregistrement : auditez vos droits

Odoo 20 remplace les droits d'accès et les règles d'enregistrement par un modèle unique, ir.access. Nous avons lu le code de la branche 20.0 pour comprendre la nouvelle logique de permissions et de restrictions. Avant de migrer, la revue des habilitations doit devenir un livrable du projet.

Odoo 20SécuritéDroits d'accèsMigration Odoo

Parmi les notes de version d'Odoo 20, publiées après l'Odoo Experience de fin septembre, une ligne passe presque inaperçue au milieu des agents IA et du nouveau plan comptable. Elle annonce que les droits d'accès « have been simplified by removing record rules »1. Pour un utilisateur, c'est une ligne de plus. Pour une PME qui a fait cloisonner ses commerciaux, ses filiales ou ses sous-traitants, c'est la couche qui décide qui voit quoi dans la base, et elle change de forme.

Nous avons lu le code de la branche 20.0 plutôt que les résumés. Voici ce qu'il dit, et ce que nous recommandons de vérifier avant de migrer.

Deux tables fusionnent en une

Jusqu'à Odoo 19, la sécurité reposait sur deux objets. Les droits d'accès (ir.model.access) ouvraient un modèle entier à un groupe, opération par opération. Les règles d'enregistrement (ir.rule) filtraient ensuite les lignes visibles avec un domaine. Un commercial pouvait ainsi lire le modèle des devis, tout en ne voyant que les siens.

Dans la branche 20.0, le fichier ir_rule.py n'existe plus dans le module de base, et le dossier de sécurité de ce module contient un unique ir.access.csv2. Le nouveau modèle ir.access porte dans une même ligne le modèle concerné, le groupe éventuel, les opérations et le domaine. L'en-tête du fichier CSV de base suffit à comprendre la logique : id,name,model_id,group_id/id,operation,domain. Les quatre colonnes booléennes de lecture, écriture, création et suppression disparaissent au profit d'un champ operation qui combine les lettres c, r, u et d3.

Odoo 19Odoo 20
ir.model.access (droit sur le modèle)ligne ir.access avec groupe, sans domaine
ir.rule liée à un groupeligne ir.access avec groupe et domaine (« permission »)
ir.rule globale, sans groupeligne ir.access sans groupe (« restriction »)
perm_read, perm_write...operation = combinaison de c, r, u, d
domain_forcedomain

Le modèle calcule lui-même la nature de chaque ligne. Avec un groupe, elle devient une « permission ». Sans groupe, elle devient une « restriction » qui s'applique à tous les utilisateurs3.

Les règles de combinaison, lues dans le code

La documentation Odoo 19 posait trois principes. Les règles globales se cumulent, et chacune restreint davantage. Les règles de groupe s'additionnent, ce qui peut élargir l'accès sans dépasser les bornes fixées par les règles globales. Enfin, les deux ensembles s'intersectent4.

Le code d'Odoo 20 reprend cette mécanique dans ses commentaires. Les permissions sont « OR-ed together », tandis que les restrictions « are AND-ed and can each fail independently »3. Sur le papier, la continuité est donc forte, et les cas simples devraient migrer sans surprise.

Un point mérite pourtant un test sur vos données. En Odoo 19, un groupe qui possédait un droit d'accès sans règle d'enregistrement n'élargissait pas les règles d'un autre groupe : seules les règles des groupes de l'utilisateur entraient dans l'union. En Odoo 20, droit et domaine vivent sur la même ligne, et une permission sans domaine couvre logiquement tous les enregistrements. Si un utilisateur cumule un groupe large sans domaine et un groupe filtré, l'union des deux risque de lui ouvrir l'ensemble des lignes. C'est notre lecture du code, pas un comportement documenté par Odoo. Elle se vérifie en dix minutes sur une base de test, avec un compte qui cumule les deux profils.

Les intégrateurs qui ont publié des guides de migration convergent sur ce point. L'un d'eux décrit des sémantiques OR et AND « différentes d'avant » qui demandent de la prudence au moment de consolider les règles5.

Ce que cela casse dans un projet existant

Trois familles de personnalisations sont concernées.

La première regroupe les modules sur mesure. Chaque fichier ir.model.access.csv et chaque règle déclarée en XML doit être réécrit au format ir.access. Un module qui crée encore des enregistrements ir.rule vise un modèle absent de la branche 20.02. Le guide de migration d'Ecosire rappelle que, selon la documentation d'Odoo, une base qui embarque des modules personnalisés ne peut pas être migrée tant que ces modules n'ont pas de version pour la cible6.

La deuxième concerne les réglages faits à la main par un administrateur, dans l'interface, sur des règles standard. Odoo 20 prévoit une méthode customize dont le commentaire est explicite : si l'accès provient d'un module, elle « deactivate it and edit a copy »3. Un champ calculé is_standard distingue les lignes livrées par un module de celles créées par export, par personnalisation ou par Studio. Pour l'audit, c'est une bonne nouvelle, car on sait enfin quelles lignes sortent du standard. Pour la maintenance, cela signifie qu'une règle standard personnalisée ne suivra plus les corrections de l'éditeur, puisque la copie active remplace l'original désactivé.

La troisième touche les applications qui ont reçu leurs propres réglages dans cette version. Les notes de version citent la possibilité de restreindre les utilisateurs « light » au seul module Code-barres, des groupes d'utilisateurs pour gérer les droits sur les fichiers et dossiers de Documents, et l'interdiction d'utiliser Présences sans droit dédié1. Ce dernier point peut couper l'accès à des salariés qui pointaient jusque-là sans droit explicite.

Une trace des changements de groupes

Odoo 20 ajoute un élément utile pour la gouvernance. Les modifications de groupes d'un utilisateur sont désormais journalisées dans son fil de discussion et dans les journaux du serveur1. Jusqu'ici, savoir qui avait donné les droits de gestionnaire comptable à un stagiaire demandait de fouiller les logs ou de faire confiance à la mémoire de l'administrateur. Cette trace ne remplace pas une revue périodique des habilitations, mais elle rend la revue vérifiable.

Une méthode d'audit en quatre temps

Nous conseillons de traiter ce chantier avant la migration technique, et non pendant.

  1. Inventorier en Odoo 19. Exportez les droits d'accès et les règles d'enregistrement actifs, en séparant le standard de ce qui a été ajouté ou modifié. Les règles globales personnalisées méritent une attention particulière, car la documentation prévenait déjà que plusieurs règles globales peuvent, mal combinées, supprimer tout accès4.
  2. Cartographier les profils réels. Listez les combinaisons de groupes que portent vraiment vos utilisateurs. C'est là que se cachent les cumuls à risque décrits plus haut.
  3. Tester sur une base migrée. Odoo fournit une base de test migrée avant toute migration de production. Connectez-vous avec un compte de chaque profil et vérifiez ce qu'il voit sur les modèles sensibles : devis, factures, fiches salariés, contacts multi-sociétés.
  4. Documenter les écarts. Le champ note du modèle ir.access accepte du texte libre3. Utilisez-le pour expliquer pourquoi une restriction existe. Le prochain intégrateur vous en remerciera.

Notre lecture

Fusionner droits et règles est une bonne décision. Dans une PME, l'administrateur Odoo n'est souvent pas un spécialiste, et deux couches qui interagissent entre elles laissent passer des erreurs : une règle oubliée, ou contredite par un groupe ajouté plus tard. Une seule table, avec une distinction claire entre permission et restriction, se lit plus facilement.

Le risque se situe dans la transition. Une migration réussie au sens technique, sans erreur au démarrage, peut très bien laisser un commercial voir le portefeuille de ses collègues. Personne ne le remarquera avant qu'un client le signale. Les nouveautés d'Odoo 20 qui attirent l'attention, comme les agents IA capables de créer et modifier des enregistrements, rendent ce point plus sensible encore, car un agent agit avec des droits qu'il faut avoir bornés correctement.

Notre recommandation est simple. Faites de la revue des habilitations un livrable à part entière de votre projet Odoo 20, avec un responsable métier qui valide les profils et non le seul développeur qui porte les modules.

Sources

Footnotes

  1. Odoo, « Odoo 20 Release Notes », sections General (Simplified access rights), Technical, Barcode, Documents et Attendances. ↩ ↩2 ↩3

  2. Dépôt GitHub odoo/odoo, branche 20.0 : le fichier odoo/addons/base/models/ir_rule.py renvoie une erreur 404, et odoo/addons/base/security contient ir.access.csv (141 lignes de données) et base_groups.xml. Constat effectué le 16 octobre 2026. ↩ ↩2

  3. Dépôt GitHub odoo/odoo, branche 20.0, fichier odoo/addons/base/models/ir_access.py : champs operation, domain, kind, is_standard, note, méthodes customize et _get_failed_accesses. ↩ ↩2 ↩3 ↩4 ↩5

  4. Odoo, documentation développeur 19.0, « Security in Odoo », sections Access Rights et Global rules versus group rules. ↩ ↩2

  5. Publication LinkedIn d'un développeur Odoo (profil mantu105) sur la fusion des règles dans le modèle d'accès d'Odoo 20. Source secondaire, citée pour l'avertissement et non pour un détail technique. ↩

  6. Ecosire, « Odoo 19 to 20 upgrade guide ». Source secondaire qui cite la documentation de migration d'Odoo. ↩

Sur le même thème

Votre idée mérite un vrai logiciel

Une question, un projet Odoo ?

Modules préconfigurés, intégration, sur-mesure — parlons-en sans engagement.