[IDOR] sécurisation des urls de consultation des PASS IAE - part 1 [GEN-2405]#5446
Conversation
xavfernandez
left a comment
There was a problem hiding this comment.
Dans l'idée, il faut que les tests passent sur tous les commits pour faciliter un éventuel git bisect. Donc la mise à jour des snapshots devraient être squashés avec l'ajout du champs.
| name="public_id", | ||
| field=uuid_field(default=None), | ||
| ), | ||
| migrations.RunPython(fill_public_id_approval, migrations.RunPython.noop, elidable=True), |
There was a problem hiding this comment.
Il vaut mieux mettre l'ajout de la colonne dans une migration dédiée, sans atomic=False. Sinon, si le déploiement est interrompu, ça va être pénible.
| field=uuid_field(default=None), | ||
| ), | ||
| migrations.RunPython(fill_public_id_approval, migrations.RunPython.noop, elidable=True), | ||
| migrations.AlterField(model_name="approval", name="public_id", field=uuid_field(default=uuid.uuid4)), |
There was a problem hiding this comment.
Pourquoi faire un AlterField ? Tu peux directement ajouter le champs avec son default=uuid.uuid4.
There was a problem hiding this comment.
je vérifie, mais lors des premiers essais, avec un default=uuid.uuid4, la migration appliquait la même valeur d'uuid sur toutes les lignes, et cassait la contrainte d'unicité.
There was a problem hiding this comment.
Effectivement, il faut bien faire un AddField(..., default=None, ...) suivi d'un AlterField(..., default=uuid.uuid4, ...) 😞
0d9a3e5 to
20c311e
Compare
20c311e to
df34895
Compare
| verbose_name="identifiant public", | ||
| help_text="identifiant opaque, pour les API et les URLs publiques", | ||
| default=None, | ||
| default=uuid.uuid4, |
There was a problem hiding this comment.
J'aurais mis cette modif dans le 1er commit (avec une migration enchaînant AddField & AlterField), mais ça marche aussi comme cela :)
🤔 Pourquoi ?
Catégories changelog
PASS IAE
🍰 Comment ?
🧑🏭 ajout du champ
public_id, uuid, unique, sur les modèlesApproval🧑🏭 hydratation du champ, puis passage en default
uuid4public_idreste ennull=Truepour éviter un déphasage entre l'état de la base de données et django pendant les migrations.⏭️ PR préparatoire à la #5431
🚨