Étape 2 sur 3 · environ 35 min

Limitez chaque utilisateur à ses propres notes

L'ACL autorise les opérations sur le modèle. Ajoutez maintenant une règle sur les enregistrements, appelée record rule dans Odoo, qui limite ces opérations aux notes dont user_id correspond à l'utilisateur courant.

1. Créez le fichier de sécurité

Dans le dossier security déjà utilisé pour l'ACL, créez le fichier suivant. Recopiez le domaine sans ajouter d'autre condition.

custom_addons/training_hello/security/training_note_security.xml
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
    <record id="training_note_rule_own" model="ir.rule">
        <field name="name">Notes de formation : notes du propriétaire</field>
        <field name="model_id" ref="model_training_note"/>
        <field name="groups"
               eval="[Command.link(ref('group_training_note_user'))]"/>
        <field name="domain_force">[('user_id', '=', user.id)]</field>
    </record>
</odoo>

2. Lisez chaque champ de la règle

  • training_note_rule_own est l'identifiant externe stable de l'enregistrement ir.rule.
  • model_training_note désigne le modèle training.note, comme dans l'ACL.
  • Command.link(ref('group_training_note_user')) relie la règle au groupe Training Notes User créé dans la section 1. Il ne crée pas de groupe.
  • [('user_id', '=', user.id)] est le domaine imposé. Odoo conserve un enregistrement seulement si son propriétaire est l'utilisateur de l'environnement courant.

Les indicateurs d'opération d'une nouvelle ir.rule sont actifs par défaut. Cette condition s'applique donc à la création, à la lecture, à la modification et à la suppression dans cet exercice.

L'ACL et la règle sur les enregistrements répondent à deux questions différentes

L'ACL du CSV accorde au groupe le droit de demander une opération sur training.note. La règle limite ensuite les enregistrements qui peuvent subir cette opération. Si aucune ACL n'accordait la création, cette règle ne pourrait pas la rendre possible.

3. Déclarez le XML dans le manifeste

Dans la liste data, ajoutez le nouveau chemin après l'ACL des notes et avant les vues. Le fichier des groupes doit rester avant le CSV, car celui-ci utilise son external ID. Conservez toutes les autres entrées ainsi que la section assets déjà présente.

custom_addons/training_hello/__manifest__.py · voisinage à obtenir dans data
"security/training_note_groups.xml",
"security/ir.model.access.csv",
"security/training_note_security.xml",
"views/training_note_views.xml",

Le manifeste charge ainsi le fichier dans la base lors de la mise à niveau. Le simple fait de créer le XML sur le disque n'active aucune règle.

4. Mettez le module à niveau

  1. Action qui modifie la base d'exercice : ouvrez Applications, recherchez Hello Odoo, puis choisissez Mettre à niveau. Odoo crée alors l'enregistrement ir.rule décrit par le XML.

Vous avez modifié des fichiers de données XML et le manifeste, pas du code Python : la mise à niveau suffit, sans redémarrage d'Odoo.

Résultat attendu : la mise à niveau se termine sans erreur de XML ni d'identifiant externe. À partir de cet instant, les recherches et les opérations d'écriture sur training.note passent par le domaine du propriétaire pour les membres de Training Notes User.

Conservez l'environnement authentifié

N'ajoutez aucune élévation de privilèges pour faire disparaître un refus. La session ou la clé d'API doit rester associée à son utilisateur, afin que l'ACL et la règle sur les enregistrements soient réellement vérifiées.

5. Vérifiez l'enregistrement chargé

En mode développeur, ouvrez Paramètres → Technique → Sécurité → Règles d'enregistrement et recherchez Notes de formation : notes du propriétaire.

Point de contrôle — observez la règle dans Odoo

La fiche vise training.note, contient le groupe Training Notes User et affiche le domaine [('user_id', '=', user.id)]. Revenez ensuite aux notes : les tests avec Alex et Sam appartiennent à l'étape suivante.