Итак, я работаю над REST API в Node, используя Express, и у меня возникли некоторые проблемы в том, как структурировать некоторые из них. Я пытаюсь разделить бизнес-логику на сервисный уровень, довольно стандартный из того, что я собираю, но это оставляет меня неуверенным, как обращаться с разрешениями.
Скажем, например, у меня есть система, где у пользователей есть машины. Если бы я просто обрабатывал все в контроллере, я бы сделал что-то вроде:
// PATCH /car/:id
export async function updateCar(req, res) {
const car = await CarModel.findOne(req.params.id);
if (req.session.user.id !== car.owner.id) {
return res.status(403).send()
}
await CarModel.update(req.params.id, req.body);
res.status(200).send();
}
Но теперь давайте скажем, что я хочу переместить все это в служебный объект. Имеет ли смысл сделать что-то вроде этого:
// PATCH /car/:id
export async function updateCar(req, res) {
try {
await CarService.update(req.params.id, req.body, req.session.user);
} catch (err) {
if (err instanceof PermissionError) {
return res.status(403).send();
}
}
res.status(200).send();
}
Или более разумно обрабатывать проверку разрешений в контроллере, чем вызывать службу? Это решило бы проблему наличия случаев, когда мне не нужно проверять разрешения (например, когда фоновый процесс должен сделать обновление или что-то в этом роде), но также кажется, что он помещает много ненужного кода в контроллер, который не не касайся этого.
Любой совет? Возможно, я переосмыслил это?