Check user belongs to dataset organization before creation #437
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.
Nouvelle tentative suite à #435
Refs #388
Motivation
Cette PR "officialise" le fait que dans notre modèle de données, un utilisateur a le droit d'ajouter un jeu de données à un catalogue seulement s'il fait partie de l'organisation.
(Jusqu'ici le front s'en assurait, mais il n'y avait aucune garantie côté règles métier dans le backend.)
Comme pour le front (https://github.com/etalab/catalogage-donnees/pull/441/files#diff-6debc9c1c928e75751dcea3a25cc55f9ac2b13c2a462592ccb0c9164b91920f1R5), cette contrainte s'applique aussi au rôle
ADMIN
, à comprendre désormais comme un respo d'organisation (cf #288). La possibilité de le faire pour les "super-admins" est remise à plus tard, cf #452.Implémentation
Concrètement, la commande
CreateDataset()
requiert désormais une valeuraccount
qui est utilisée pour vérifier que l'utilisateur en question a le droit de créer un dataset au sein du catalogue visé par leorganization_siret
. Le cas échéant, une exception est levée et l'API l'intercepte pour renvoyer une 403.La vérification de cette règle métier se fait donc au sein des couches métiers (dans la couche application).
Un artifice avec une classe-marqueur
Skip
permet de bypasser cette vérification lorsque le contexte ne fait pas intervenir d'utilisateur (en l'occurrence, dans uninitdata
ou dansmake randomdatasets
).La même approche sera utilisée pour l'update et la suppression.