Эффективный способ удалить документ в мангусте с аутентификацией - PullRequest
1 голос
/ 14 марта 2019

Я создаю API для отдыха с экспрессом и мангустом. Вот как я удаляю документы из коллекции:

...

if (!req.session.user) return res.status(401).send()
const e = await Event.findOne({_id: req.params.eventId}).exec();
if (e.owner !== req.session.user) return res.status(403).send();
await Event.findOneAndDelete({_id: req.params.eventId}).exec();
return res.status(204).send()

...

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

Как правильно сделать это только одним запросом?

1 Ответ

0 голосов
/ 14 марта 2019

Вы можете просто передать поле владельца в запросе на удаление с владельцем, заданным как req.session.user, и, если будет документ с определенным идентификатором события и владельцем в качестве пользователя сеанса, он будет удален.

if (!req.session.user) return res.status(401).send()
await Event.findOneAndDelete({_id: req.params.eventId, owner: req.session.user}).exec();
return res.status(204).send()

И, так как mongodb не имеет внутренней поддержки RBAC на уровне документов, будет много случаев использования, когда вам придется делать несколько запросов, чтобы определить, авторизован ли запрос на выполнение определенных действий или нет.Вы можете проверить Casl library для лучшего управления RBAC, а также имеет встроенную поддержку mongodb.

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