Étape 1 sur 3 · environ 30 min

Affichez le propriétaire sans déplacer la sécurité dans la vue

La liste et la fiche peuvent montrer le propriétaire de chaque note. Elles restent toutefois une présentation : le défaut du modèle le renseigne quand le formulaire ne l'envoie pas, et la règle sur les enregistrements, appelée record rule dans Odoo, décide quelles notes l'utilisateur peut atteindre.

1. Ajoutez le propriétaire à la liste existante

Au Jour 2, vous avez créé la vue en liste de training.note dans training_note_views.xml. Ajoutez user_id après le titre. En Odoo 19, gardez bien la balise <list>.

custom_addons/training_hello/views/training_note_views.xml · architecture de training_note_view_list
<list>
    <field name="title"/>
    <field name="user_id"/>
    <field name="category_id"/>
</list>

Cette colonne affiche la relation vers l'utilisateur. Elle ne filtre pas la liste. Avant que la vue reçoive les enregistrements, l'ORM a déjà appliqué le domaine de la règle : [('user_id', '=', user.id)].

2. Montrez le même champ dans la fiche

Ajoutez aussi user_id après le titre de la vue en formulaire. Rendez-le non modifiable dans cet écran : une personne qui saisit une note n'a pas à choisir son identité.

custom_addons/training_hello/views/training_note_views.xml · architecture de training_note_view_form
<form>
    <sheet>
        <group>
            <field name="title"/>
            <field name="user_id" readonly="1"/>
            <field name="category_id"/>
            <field name="body"/>
        </group>
    </sheet>
</form>
readonly="1" améliore la fiche, mais ne protège pas l'enregistrement

Un autre client peut appeler l'ORM sans utiliser cette vue en formulaire. Dans cette version simple, le défaut renseigne le propriétaire lorsque le client n'envoie pas user_id. La sécurité de lecture vient ensuite de la record rule, appliquée côté serveur aux notes du compte courant.

3. Mettez le module à niveau

Action qui modifie la base d'exercice : dans Applications, ouvrez Hello Odoo, puis choisissez Mettre à niveau. Le fichier XML est déjà déclaré dans le manifeste, mais Odoo doit réimporter sa nouvelle architecture.

Résultat attendu : la vue en liste affiche une colonne Propriétaire. La fiche affiche le même champ sans permettre sa modification. Aucun changement Python n'est nécessaire dans cette étape.

4. Observez la création avec Alex

Connectez-vous comme Alex et ouvrez Notes de formation → Notes. Vérifiez d'abord que la liste contient seulement des lignes dont la colonne Propriétaire affiche Alex. Créez ensuite cette note :

Valeurs à saisir dans la fiche standard
Titre :   Alex · vue standard
Contenu : Créée depuis la fiche Odoo.

Avant l'enregistrement, le champ Propriétaire affiche Alex grâce à la valeur par défaut du modèle. Après l'enregistrement, la nouvelle ligne porte encore ce propriétaire. La valeur n'a pas été écrite dans le XML : l'environnement ORM de la session a fourni l'identité.

5. Refaites l'observation avec Sam

Ouvrez une seconde session de navigateur indépendante, par exemple une fenêtre privée, puis connectez-vous comme Sam. Cette séparation évite qu'une connexion remplace l'autre. Ouvrez le même menu et créez :

Valeurs à saisir dans la seconde session
Titre :   Sam · vue standard
Contenu : Créée depuis la même fiche Odoo.

À observer : Sam apparaît dans le champ non modifiable avant l'enregistrement, puis dans la colonne de la nouvelle ligne. La liste de Sam ne montre pas Alex · vue standard. Dans l'autre session, la liste d'Alex ne montre pas Sam · vue standard.

Point de contrôle — comparez les deux listes

Dans la session d'Alex, retrouvez Alex · vue standard avec Alex comme propriétaire et aucune note de Sam. Dans la session de Sam, retrouvez Sam · vue standard avec Sam comme propriétaire et aucune note d'Alex. Les deux sessions utilisent pourtant la même action, les mêmes vues, le même modèle, le même ORM et la même table training_note.

Premier chemin, même politique

La vue décrit les champs et leur disposition. Les droits d'accès (ACL) autorisent les utilisateurs internes à créer et lire des notes. Comme la fiche ne fournit pas de propriétaire, le défaut du modèle utilise l'utilisateur authentifié. La règle sélectionne ensuite ses enregistrements. PostgreSQL conserve enfin la valeur entière de la relation dans user_id.