在 Loopback 上未经授权的 HasMany 关系入口点

HasMany relation entry point unauthorized on Loopback

Loopback 的新手,我尝试用用户模型和待办事项模型制作一个简单的 API。

名为Todoer的用户模型基于内置的用户模型。创建一个待办事项、登录、注销等。就像一个魅力。 Todo 模型基于 PersistedModel,目前没有特殊的 ACL。

我创建了一个从 Todo 模型到 Todoer 模型的 Belongs To 关系所有权。 我还建立了从 TodoerTodoHasMany 关系,以便能够检索 a 的所有待办事项用户通过端点 GET /Todoer/{id}/todos

通过登录的待办事项,使用良好的令牌和 ID,我可以轻松地为登录用户保留来自待办事项端点的响应,例如 GET /Todoer/{id},所以我确定身份验证机制正在运行嗯

但每次我想点击 GET /Todoer/{id}/todos 时,我只会收到一条错误消息,告诉我我没有被授权。我始终确定我提供了良好的令牌和登录时获得的 Todoer Id。

即使我在 Todoer 模型上制作了一个大的 ACL 告诉所有人一切都OK,它也会发生同样的情况。

我错过了什么?我想不通...

感谢您的帮助...

您需要在 ACL 规则优先级) 上考虑内置 Usermodel. You are actually running into its general DENY ACL rule. It takes priority over your general ALLOW ACL rule (docs 的 ACL。

您可以编写更具体的 ACL 规则以通过它(docs on 访问相关模型)。

{
  "accessType": "*",
  "principalType": "ROLE",
  "principalId": "$everyone",
  "permission": "ALLOW",
  "property": "__get__todos"
}

在这种情况下可能更方便和安全的另一种选择是在 Todo 本身上使用动态 $owner 角色(docsDynamic角色).

{
  "accessType": "*",
  "principalType": "ROLE",
  "principalId": "$owner",
  "permission": "ALLOW"
}

如果您想了解应用程序中的 ACL 发生了什么,将 DEBUG 环境变量设置为 loopback:security:* 以启用相当广泛的安全日志记录非常有用。