Разрешения Handeling на уровне сервиса - PullRequest
0 голосов
/ 09 июля 2019

Итак, я работаю над 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();
}

Или более разумно обрабатывать проверку разрешений в контроллере, чем вызывать службу? Это решило бы проблему наличия случаев, когда мне не нужно проверять разрешения (например, когда фоновый процесс должен сделать обновление или что-то в этом роде), но также кажется, что он помещает много ненужного кода в контроллер, который не не касайся этого.

Любой совет? Возможно, я переосмыслил это?

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