Как правильно проверить разрешения с помощью Featherjs и Postman?

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

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

Для этого я установил перо-разрешение с помощью NPM, и я прочитал документацию, но я застрял, пытаясь проверить, действительно ли работает эта функциональность. Вот моя установка:

const checkPermissions = require('feathers-permissions');

module.exports = {
  before: {
    all: [],
    find: [ authenticate('jwt') ],
    get: [ authenticate('jwt') ],
    create: [ checkPermissions({
      roles: [ 'admin' ]
    }), authenticate('jwt') ],
    update: [ authenticate('jwt') ],
    patch: [ authenticate('jwt') ],
    remove: [ authenticate('jwt') ]
  },

Итак, теперь, когда я пытаюсь создать пользователя, отправив запрос POST на конечную точку пользователя моего приложения (http: // localhost: 3030 / users). Ниже вы можете найти текст POST-запроса, который я делаю.

 {
    "email": "[email protected]",
    "password": "somerandompassword",
    "permission": ["user:*"]
}

Я всегда получаю такое сообщение:

{
    "name": "Forbidden",
    "message": "You do not have the correct permissions (invalid permission entity).",
    "code": 403,
    "className": "forbidden",
    "errors": {}
}

Перед отправкой запроса POST я аутентифицирую себя и получаю токен-носитель, который включаю в свое сообщение POST, чтобы идентифицировать себя. Конечно, я также удостоверился, что у меня есть необходимые права доступа для создания пользователя.

Может ли кто-нибудь из вас помочь мне в этом? Я что-то не так делаю в конфигурации бэкэнда, т.е. забыл добавить код в сервис «Пользователи»? Или мне следует передать некоторые дополнительные параметры в моем запросе POST?

Любая помощь будет принята с благодарностью!


person sgandolfo    schedule 23.02.2021    source источник


Ответы (2)


Если вы отправляете правильный токен на предъявителя, это, вероятно, просто вопрос порядка. В частности, authenticate('jwt') необходимо запустить сначала, чтобы получить пользователя, для которого вы хотите проверить разрешения:

const checkPermissions = require('feathers-permissions');

module.exports = {
  before: {
    all: [],
    find: [ authenticate('jwt') ],
    get: [ authenticate('jwt') ],
    create: [ authenticate('jwt'), checkPermissions({
      roles: [ 'admin' ]
    }) ],
    update: [ authenticate('jwt') ],
    patch: [ authenticate('jwt') ],
    remove: [ authenticate('jwt') ]
  },

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

person Daff    schedule 24.02.2021

Это сработало как шарм! Не могу поверить, что упустил это из виду в документации.

person sgandolfo    schedule 24.02.2021