如何使用 Featherjs 和 Postman 正确测试权限?

How do I properly test permissions using Featherjs & Postman?

首先,我想提一下,我对编码还很陌生,所以请原谅我可能很愚蠢的问题。

所以我正在使用 FeatherJS 开发一个应用程序,在我的应用程序中我想使用权限来确保某些用户在他们可以执行的操作方面受到限制,即只允许管理员创建或更新用户。

为此,我使用 NPM 安装了 feathers-permission 并阅读了文档,但在尝试测试该功能是否真正起作用时我遇到了困难。这是我的设置:

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') ]
  },

所以现在当我尝试通过向我的应用程序的用户端点 (http://localhost:3030/users) 发送 POST 请求来创建用户时。您可以在下面找到我提出的 POST 请求的正文

 {
    "email": "someone@email.com",
    "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 请求中传递一些额外的参数吗?

如有任何帮助,我们将不胜感激!

如果您确实发送了正确的不记名令牌,那可能只是顺序问题。具体来说,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') ]
  },

the beginning of the feathers-permission docs 中简要提到了这一点,但我也刚刚更新了第一个示例,以便更清楚地说明这一点。

太棒了!不敢相信我在文档中忽略了这一点。