Aller au contenu principal

19-11 Sécuriser la modification

Peut-être vous êtes-vous dit lors de la modification d'une question qu'on ne vérifiait pas que cette dernière appartenait bel et bien à l'utilisateur essayant de faire la modification !?

En effet, on peut vérifier (et il faut le faire!) avant de faire la modification que la question appartient bien à l'utilisateur connecté.

Snowfall.Web.Mvc/Controllers/QuestionsController.cs
public async Task<IActionResult> Update(int id, int evenementId, ModifierQuestionViewModel modifierQuestionViewModel)
{
var evenement = await _evenementService.FindById(evenementId);
var question = await _questionService.FindById(id);

if (evenement == null || question == null)
return NotFound();
if (question.UtilisateurId != User.Identity?.Id())
return Forbid();

//...
}
info

On vérifie que le id d'utilisateur correspond bien à celui de l'utilisateur connecté en utilisant User.Identity et la propriété Id que nous avons ajoutée via extension dans le niveau sur les Claims.

On peut faire la même chose pour l'action Edit:

Snowfall.Web.Mvc/Controllers/QuestionsController.cs
public async Task<IActionResult> Edit(int id, int evenementId)
{
var evenement = await _evenementService.FindById(evenementId);
var question = await _questionService.FindById(id);

if (evenement == null || question == null)
return NotFound();
if (question.UtilisateurId != User.Identity?.Id())
return Forbid();

//...