В настоящее время я изучаю 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 (мне нужно было бы как-то передать объект запроса). Это вообще возможно?
Сводка
Я заблудился и не знаю, какой способ проверки прав собственности пользователей выбрать.