1. Ajoutez une route publique, sans toucher aux notes
Créez ce nouveau contrôleur. La route ne lit aucun modèle du journal et ne modifie rien : elle répond seulement avec le nom de l’utilisateur courant.
from odoo import http
from odoo.http import request
class TrainingWhoAmIController(http.Controller):
@http.route("/training/who-am-i", type="http", auth="public", methods=["GET"])
def who_am_i(self):
user = request.env.user
return request.make_json_response({
"user_name": user.name,
})auth="public" rend la route accessible sans connexion. Quand personne n’est connecté, request.env.user est l’utilisateur public d’Odoo. Quand vous êtes connecté, il devient votre compte Odoo.
2. Importez le nouveau contrôleur
Dans le package des contrôleurs, ajoutez cette ligne avec les imports déjà présents :
from . import who_am_iNe modifiez ni training_notes.py, ni notes_api.py. Cette route est un petit repère séparé pour l’exercice.
3. Observez les deux réponses
- Action qui redémarre Odoo : redémarrez le serveur local, car vous avez ajouté du code Python.
- Dans une fenêtre de navigation privée, ouvrez
http://127.0.0.1:8069/training/who-am-i. La réponse JSON contient le nom de l’utilisateur public. - Connectez-vous ensuite à Odoo comme Alex, puis ouvrez exactement la même URL. La réponse contient maintenant le nom d’Alex.
| Requête | Valeur de request.env.user |
|---|---|
| Sans session Odoo | L’utilisateur public. |
| Avec la session d’Alex | Le compte Alex connecté. |
4. Optionnel — voyez l’utilisateur de la clé Bearer
Si votre espace d’exercice permet de créer une clé API, ajoutez cette seconde route au même fichier. Elle ne touche toujours pas aux notes : elle montre seulement le compte associé à la clé Bearer.
@http.route("/who/am/i/bearer", type="http", auth="bearer", methods=["GET"])
def who_am_i_bearer(self):
user = request.env.user
return request.make_json_response({
"user_name": user.name,
})Redémarrez Odoo après cette modification. Avec les variables temporaires déjà préparées au Jour 4, appelez la route ainsi :
curl \
--header "Authorization: Bearer $TRAINING_API_KEY_ALEX" \
http://127.0.0.1:8069/who/am/i/bearerLa réponse JSON contient le nom d’Alex : Odoo a retrouvé le propriétaire de la clé et l’a placé dans request.env.user. Si vous ne disposez pas de clé API dans cet environnement, sautez cette partie ; la suite du cours reste identique.
5. Gardez ces routes comme démonstrations
Une route publique n’accorde aucun droit sur training.note. L’utilisateur public ne reçoit pas l’ACL du journal. N’ajoutez pas sudo() pour lire des notes depuis cette route : elle sert uniquement à voir quel utilisateur Odoo traite la requête.
Point de contrôle — identifiez l’utilisateur de la requête
La même URL répond avec l’utilisateur public sans session, puis avec votre compte après connexion. Vous pouvez maintenant utiliser l’utilisateur courant côté serveur, sans demander son identité au navigateur.