Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Actuellement, la vérification des permissions et la méthode d'authentification sont couplés. En effet,
current_user()
authentifie l'utilisateur à partir duBearer
token dans la requête, mais on l'utilise aussi pour les permissions :IsAuthenticated
,HasRole
.Il faut découpler ces deux aspects. Je m'en suis rendu compte en regardant à #294 : si on implémentait une authentification "DataPass" (via auth.api.gouv), on emploierait une autre méthode (passage par le serveur OpenID Connect) mais il faut que la logique des permissions ne change pas.
Cette PR refactor le code pour utiliser le mécanisme de
AuthenticationBackend
de Starlette. Ainsi, la logique decurrent_user()
migre vers unTokenAuthBackend
, et celui-ci est branché à unAuthMiddleware
. On a alors accès àrequest.user
dans les routes avec une interface unique indépendante du backend, ce qui n'était pas le cas avant, et c'est là-dessus que se basent les utilitaires de permissions.