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();
//...