Sécurité: Empêcher un utilisateur d’accéder aux droits des prescripteurs habilités s’il effectue des démarches depuis une organisation non habilitée [GEN-2332]#5887
Conversation
xavfernandez
left a comment
There was a problem hiding this comment.
Ça fait plaisir toutes ces requêtes en moins 👍
a7206ee to
8755d53
Compare
| # Only authorized prescribers may create a GEIQ diagnosis, so if the author is a prescriber | ||
| # he was authorized when he created it | ||
| return geiq_allowance_amount(self.author.is_prescriber, self.administrative_criteria.all()) |
There was a problem hiding this comment.
Personnellement je suis pas super fan de simplifier un comportement en se basant sur des suppositions, si un jour elles changent alors tout devient faux et il y a peu de chance qu'on revienne sur ce bout de code, surtout si rien ne casse.
There was a problem hiding this comment.
Cette property est actuellement fausse: si self.author.is_prescriber_with_authorized_org is False mais que self.author.is_prescriber is True alors ça veut dire qu'il était PH à l'époque du diag, et donc que geiq_allowance_amount() == 1400
Il ne faut donc pas regarder is_prescriber_with_authorized_org qui donne une vision aujourd'hui, et pas à l'époque.
La bonne approche est de stocker dans un champ le montant de l'aide, mais @xavfernandez a dit que ce n'était pas prioritaire, et qu'on pouvait faire comme ça en attendant.
Ça ne me dérange pas d'ajouter le montant sur l'objet, c'est assez rapide à faire dans une PR séparée.
There was a problem hiding this comment.
Pas directement lié aux changements de la PR, mais maintenant que ça utilise request on pourrais tout à fait faire des template filter et ainsi réduire un peu le boilerplate dans certaines vues.
There was a problem hiding this comment.
Bon, je suis en train de regarder pour passer can_(view|edit)_personal_information en template filters, sauf que dans les template, on a des {{ job_application.job_seeker.get_full_name|mask_unless:can_view_personal_information }} ce qui fait qu'on doit mettre des {% with ... %} autour et c'est pas franchement mieux selon moi.
Je vais donc laisser de côté pour l'instant.
vincentporte
left a comment
There was a problem hiding this comment.
Bravo pour l'investigation Antoine !
Je comprends que si nous mettons la propriété sur User, nous devrions à chaque fois restester si user == request.user. Donc plutôt option 1.
Je comprends moins bien la question que tu soulèves sur les check_users, car la méthode reçoit déjà request.user.
|
Suite à la réunion on part sur |
47b7cce to
1e86735
Compare
| job_application = JobApplicationFactory(job_seeker__with_mocked_address=True) | ||
| job_seeker = job_application.job_seeker | ||
| # Ensure sender cannot update job seeker infos | ||
| assert not job_seeker.can_edit_personal_information(job_application.sender) |
There was a problem hiding this comment.
Pourquoi avoir supprimé ce test ?
There was a problem hiding this comment.
Parce qu'on ne peut plus appeler ce code, et que c'était redondant avec la suite du test (le post ne fait rien)
celine-m-s
left a comment
There was a problem hiding this comment.
Toutes ces requêtes en moins, ça fait bien plaisir !!! 🤩
J'ai tout relu mais je ne sais pas si tu as fini. N'hésite pas à redemander une relecture sinon.
1e86735 to
3eb4dd2
Compare
xavfernandez
left a comment
There was a problem hiding this comment.
Les deux derniers commits sont à inverser car beaucoup de tests échouent logiquement après le renommage de la méthode en is_prescriber_with_authorized_org_memberships alors que is_prescriber_with_authorized_org est encore bien utilisé.
3eb4dd2 to
2a2ef7e
Compare
Non authorized prescribers cannot access this page
…with organizations
2a2ef7e to
31e69b8
Compare
Don't pass the user when we only need to know if he's an authorized_prescriber
We will soon need the request instead of the user to know if he's an authorized prescriber
We will soon need the request instead of the user to know if he's an authorized prescriber
We will soon need an attribute on request to know if the user is currently in an authorized organization
This doesn't tell us if he's acting as an authorized prescriber, just that he is the member of at least one authorized organization
31e69b8 to
fd995fc
Compare
🤔 Pourquoi ?
request.user_is_authorized_prescriber(propriété sur l'objetrequest)request.user.is_authorized_prescriber(propriété sur l'objetUser)J'attends qu'on ai choisi la solution retenue pour adapter les tests
Pour mieux prendre en compte les permissions des utilisateurs
J'ai mis toute l'équipe en relecteurs parce que c'est une property qu'on utilise à pas mal d'endroit et qui disparait.
À présent :
J'ai trouvé plus simple de mettre la propriété sur le user pour éviter de passer l'objet
request(notamment sur les@check_user) mais c'est ouvert à discussion : je pourrait mettre unrequest.user_is_authorized_prescriberà la placeOn pourrait ajouter un post_generation sur la factory pour définir automatiquement
is_authorized_prescriberplutôt que de le faire à la main à chaque fois, mais j'ai peut qu'on se retrouve à créer des bugs car on ne se rendrait pas compte qu'une fonction aura en argument un objet qui n'y a pas accès normalement.🍰 Comment ?
🚨 À vérifier
🏝️ Comment tester ?
💻 Captures d'écran