Loopback $ owner不适用于findById

时间:2017-11-22 08:25:07

标签: node.js acl relation loopback apiconnect

我想通过环回获取有关我的用户的一些信息。 为此,我创建了一个与"user"模型相关的"accessToken"模型,直到现在/user上的POST,/user/login上的POST和/user/logout上的POST正在运行。

我在/common/models/user.json

上添加了
{
  "name": "user",
  "base": "User",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {},
  "validations": [],
  "relations": {
    "accessTokens": {
      "type": "hasMany",
      "model": "accessToken",
      "foreignKey": "userId"
    }
  },
  "acls": [
    {
      "accessType": "EXECUTE",
      "principalType": "ROLE",
      "principalId": "$authenticated",
      "permission": "ALLOW",
      "property": "logout"
    },
    {
      "accessType": "EXECUTE",
      "principalType": "ROLE",
      "principalId": "$owner",
      "permission": "ALLOW",
      "property": "findById"
    }
  ],
  "methods": {}
}

当我在/user/{id}进行GET时,我得到了:

{
  "error": {
    "statusCode": 401,
    "name": "Error",
    "message": "Autorisation requise",
    "code": "AUTHORIZATION_REQUIRED",
    "stack": "Error: Autorisation requise\n    at..."
  }
}

我想我不太了解acl / relation

1 个答案:

答案 0 :(得分:0)

这可能是因为您只允许$ownerfindById

  

要限定$ owner的资格,目标模型需要与User模型(或扩展User的模型)具有属地关系,并且属性必须与目标模型实例的外键匹配。 $ owner的检查仅对路径上带有“:id”的远程方法(例如GET / api / users /:id)执行。

  1. 确保您提供的accessToken是您要寻找的id的{​​{1}}的所有者。
  2. 如果不确定,请尝试更换: user"principalId": "$owner",然后您就会知道这是否是您的问题。