API-интерфейс Structuring Node (express, mongodb, mongoose) для условно возвращаемых значений, основанных на типе пользователя - PullRequest
0 голосов
/ 24 сентября 2019

Я создаю REST API, используя Node с express, mongodb и mongoose.

Я пытаюсь сделать следующее.Конечная точка, которая возвращает значения объекта условно на основе роли пользователя (доступно в запросе, например USER или ADMIN).

Как обычный пользователь (USER), ваш ответ может выглядеть следующим образомthis {id: "123", email: "test@test.com"}

Принимая во внимание, что ответ администратора (ADMIN) будет выглядеть так: {id: "123", email: "test@test.com", password: "abc"}

Кроме того, каков наилучший способ защиты значений при запросах исправлений, чтобы некоторые ключиможет обновляться только пользователями определенной роли.Есть ли хорошее решение сделать это с помощью mongoose (желательно с использованием схемы mongoose, чтобы уменьшить избыточность)?Если нет, то как лучше всего включить библиотеку проверки json?

В Интернете я нашел много документации по созданию API-интерфейсов REST с этим стеком, но я не смог найти ни одной, которая отвечала бы моим вопросам.

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Я думаю, что Мангуста не предоставляет эту функцию из коробки.Я считаю, что вы должны сделать это вручную.Хотя вы можете использовать такой модуль, как schema-utils для проверки.

На вашем месте я бы сделал что-то вроде этого:

  • Используйте некоторыеметод аутентификации.
  • Создайте свойство с именем role в схеме mongoose User.Где роль может быть admin / user и т. Д.
  • Создайте промежуточное ПО, чтобы проверить, является ли текущий пользователь администратором.Пример: app.post('/', auth.isAdmin, (req, res) => {}).Здесь isAdmin промежуточное ПО проверяет, является ли роль администратором, затем переходите к следующему промежуточному ПО.
  • Я бы также заполнил объект req.user текущими зарегистрированными данными пользователя.

Итак,мой код будет выглядеть примерно так:

app.patch('/email', auth.isAdmin, (req, res) => { DO UPDATE HERE });

Другой пример:

app.get('/user/:id', auth.isAuthenticated, (req, res) => {
  if (req.user.role === 'admin') { DO STUFF }
  eles { DO STUFF }
})

Не уверен, поможет ли это вам в любом случае.

0 голосов
/ 24 сентября 2019

Когда пользователь входит в систему, ему должен быть назначен подписанный (читаемый, но неизменяемый) или зашифрованный (не читаемый и неизменяемый) jwt с использованием закрытого ключа.Затем при каждом вызове API они должны отправлять это в заголовок авторизации.Расшифровывайте бэкэнд при каждом вызове, и вы сможете увидеть правильное разрешение, которому можно доверять, не было изменено.

https://github.com/auth0/node-jsonwebtoken

...