Express. js: где правильное место для проверки доступа к ресурсам в архитектуре модель-сервис-контроллер? - PullRequest
0 голосов
/ 27 мая 2020

На каком уровне я должен проверить, пытается ли пользователь удалить свой собственный комментарий (а не комментарии других пользователей) в приложении Express. js, где контроллер обрабатывает все HTTP-логики c, а служба обрабатывает бизнес-логи c и модели обрабатывают logi c базы данных. Удаление комментария пользователя выполняется с помощью этого рабочего процесса:

// This is in the routes file:
app.delete("/comments/:commentId", authenticationMiddleware, commentController.commentsDelete);
// the authentication middlerware simply checks a JWT token, queries for the user in the database and adds it to req.user

// This is in the controllers file:
commentsDelete(req, res, next) {
    const commentId = extractAndValidateRequestParameters(req);
    commentService.deleteComment(commentId);
}

// This is the services file:
deleteComment(commentId) {
    callExternalAPIsAndDoLogging()
    commentModel.deleteComment(commentId)
}

//this is the models file:
commentModel.deleteComment = (commentId) => {
    callCommentModelToCheckThatCommentHasNoReplies(commentId)
    commentModel.deleteOne({id: commentId})
}

Я обнаружил, что ни один из слоев не подходит для этого типа журнала, например:

  • контроллер не должен иметь дело со структурой базы данных
  • служба не должна обрабатывать авторизацию
  • модель не должна заботиться о том, кто пытается получить доступ к какому ресурсу.

I я также пытаюсь свести к минимуму количество запросов к базе данных, поскольку она будет содержать большое количество комментариев, а другие улучшения производительности недостижимы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...