为什么我在查询用户项时会出现 401 错误?

Why do I get error 401 when I query items of user?

在 StrongLoop API 资源管理器中,我可以选择查询:

/People/{id}/food_prefs

Person 基于内置的 User 模型。此查询应该 return 一个 JSON 列表,其中包含该人(用户)的所有 food_prefs。相反,我收到有关授权的 401 错误。

因此模型关系是:

Person has many food_prefs
food_pref belongs to Person (foreign key: personId)

food_pref 模型如下所示:

property: type : number
property: personId : number

当我向 Person/{id}/food_pref 发送请求时,我收到错误 401:

{
  "error": {
    "name": "Error",
    "status": 401,
    "message": "Authorization Required",
    "statusCode": 401,
    "code": "AUTHORIZATION_REQUIRED",
    "stack": "Error: Authorization Required\n
}

我还没有设置任何 ACL,但即使我设置了它以供所有人访问,我仍然会收到此错误。为什么?

答案是将以下权限添加到Person 模型中的ACL 部分。文件名为 common/models/person.json:

{ "accessType": "EXECUTE", 
  "principalType": "ROLE", 
  "principalId": "$everyone", 
  "permission": "ALLOW", 
  "property": "__get__foodPrefs" 
}

可以为其他方法设置类似的属性,例如用于扩展模型的方法,例如在 common/models/person.js 中设置的名为 "getList" 的远程方法。您只需将 __get__foodPrefs 替换为 getList。请务必注意,自动生成的方法(例如上面的方法)有两个下划线,而不是一个。

此外,其他权限可以是$authenticated、$owner等。