Отредактировано: пн goose - Как я могу разрешить владельцу только обновлять текущий документ? - PullRequest
1 голос
/ 08 марта 2020

РЕДАКТИРОВАНИЕ: Сводка

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

Внутри моего проекта goose Схема проекта У меня есть следующая

const projectSchema = new mongoose.Schema(

{

name: String,

description: String,

userId: mongoose.Schema.ObjectId,

}

...

Что если запрос по find () вернет:

{
_id: 213213156,
name: "Project1",
description: "A brief description"
userId: 3131132, //this is the user that created this project
}
//I have set this router so that is protected, so users need to login.

Routing:

router
.route("/:projectId")
.get(projectsController.getProject)
.patch(authController.protect, projectsController.updateProject);

Как это работает?

Каждый раз, когда я создаю проект, я назначаю userId, который текущий пользователь, вошедший в систему, имеет.

Что я пробовал?

Я пытался сделать запрос с помощью Model.find (), получить userId и затем сгенерировать оператор if.

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

Что я хочу сделать?

Я хочу иметь возможность обновить ТОЛЬКО для проекта, если его auth _id (текущий идентификатор пользователя, который хранится в req.users) совпадает с полем userId проектов, которое уже сохранено в этом проекте.

Пример.

// I want to be able to access the userId without having to query find() -- because then I would have to perform 2 queries: find() and then findByIdAndUpdate
if(userId !== req.user.id) {
return new Error(msg)
}

1 Ответ

0 голосов
/ 09 марта 2020

findOneById принимает несколько условий, поэтому вы можете сначала выполнить поиск _id, который вы хотите изменить, а во втором условии userId должен соответствовать текущему пользователю.

Model.findOneAndUpdate({ 
    _id: req.params.projectId, 
    userId: req.user.id 
    }, ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...