Подтверждение прав собственности пользователя на ресурс в Express API? - PullRequest
0 голосов
/ 24 октября 2019

В настоящее время я изучаю Express с помощью Sequelize, и я не знаю, как безопасно подтвердить право собственности пользователя на ресурс, которым манипулируют.

База данных:

  • Пользователь имеетмного продуктов
  • Каждый продукт принадлежит одному пользователю (ForeignKey = userId)

Для простоты вот маршрутизатор:

router.patch('/product/:id', (req, res) => {
  // service layer call
  const productInstance = await ProductService.update(args);

  return res.json(productInstance);
});

Я думал отри возможных решения:

  • Проверка владения в пользовательском промежуточном программном обеспечении
  • Проверка владения на уровне обслуживания
  • Проверка владения с помощью пользовательской проверки в Sequelize

Middleware

Вот пример того, о чем я думаю:

var isOwner = async (req, res, next) => {
  const product = await ProductModel.findOne({ where: { id: req.params.id }});
  if (product.userId === req.user.id) {
    next();
  }
  return res.send(401, 'Unauthorized');
};

Это решение, однако, заставляет меня думать, что мой API будет подвержен ошибкам в дальнейшем.

Сервисный уровень

Я почти уверен, что валидация на самом деле не относится к бизнес-логике, а скорее к уровню модели приложения.

Sequelize (Model) Layer

Я не нашел никаких ресурсов по передаче аргументов в пользовательские методы проверки в Sequelize (мне нужно было бы как-то передать объект запроса). Это вообще возможно?

Сводка

Я заблудился и не знаю, какой способ проверки прав собственности пользователей выбрать.

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