GrottoCenter / grottocenter-api

Grottocenter API
https://api.grottocenter.org
GNU Affero General Public License v3.0
15 stars 2 forks source link

[RESOURCES MANAGEMENT & SECURIZATION] Resources not validated or deleted must be handled automatically #695

Open urien opened 2 years ago

urien commented 2 years ago

J'importe des documents via l'import CSV, il apparaissent dans la liste des documents à valider mais ils sont également accessibles dans le document parent et lorsqu"on affiche leur page, sans indication que c'est en attente de validation

urien commented 2 years ago

L'affichage dans le document parent ne pose pas de pb, il faudrait voir pourquoi la mention en attente de validation n'apparait pas

Clm-Roig commented 2 years ago

Il y a tout un travail de refactorisation pour simplifier l'accès aux ressources historisées (documents, entrées, caves...). Des fois les contrôleurs demandent bien les données avec isValidated: true ou/et isDeleted: false mais ce n'est pas consistant à travers tout le code...

Clm-Roig commented 2 years ago

De mon expérience de ces derniers mois, ce problème de gestion de isDeleted / isValidated est vraiment récurrent et pénible à gérer.

Je pense que le plus simple c'est de rendre ça automatique dans le MappingService, avant d'envoyer la réponse au client. Comme ça on ne gère plus du tout isDeleted dans les services et dans les controllers. Le MappingService vérifiera toutes les requêtes sortantes : - Si l'utilisateur à les droits "view deleted" sur les différentes entités (ou "view not validated"), alors le middleware ne touche à rien. - Sinon, il supprime les données deleted avant d'envoyer le résultat à l'utilisateur.

EDIT

Vu que les réponses customisées sont désormais en place et utilisées partout dans l'API (res.ok() notamment), je pense que c'est plus judicieux de filtrer les données là-bas plutôt que dans le MappingService. C'est d'ailleurs ce qui est fait pour les cavités sensibles, grâce à un helper.

Clm-Roig commented 2 years ago

J'ai voulu utilisé un hook Sails pour filter toutes nos requêtes sortantes comme expliqué ici : https://sailsjs.com/documentation/concepts/extending-sails/hooks/hook-specification/routes

En utilisant un hook, la vérification serait automatique sur toutes les routes et on n'aurait pas besoin de charger le MappingService de faire ça.

Cependant, je n'ai pas réussi à l'implémenter et je crois être tombé sur un bug de Sails. J'ai créé un ticket chez Sails ici : https://github.com/balderdashy/sails/issues/7222