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

时间:2017-07-30 22:27:54

标签: acl loopback ownership

Loopback的新手,我试图用一个用户模型和一个todo模型制作一个简单的API。

名为 Todoer 的用户模型基于内置的用户模型。创建一个todoer,登录,注销等工作就像一个魅力。 Todo 模型基于 PersistedModel ,暂时没有特殊的ACL。

我从 Todo 模型到 Todoer 模型建立了属于关系,以拥有所有权。 我还从 Todoer Todo 建立了 HasMany 关系,以便能够通过端点 GET /检索用户的所有待办事项Todoer / {ID} /待办事项

通过todoer登录,具有良好的令牌和ID,我可以轻松地为已登录用户保留的Todoer端点响应,例如GET /Todoer/{id},所以我确信身份验证机制运行良好。

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

即使我在Todoer模型上做了一个大的ACL告诉所有人,但它也是一样的。

我错过了什么?我无法弄明白......

感谢您的帮助......

1 个答案:

答案 0 :(得分:0)

您需要考虑内置User模型的ACL。您实际上遇到了其常规DENY ACL规则。它优先于您的常规ALLOW ACL规则( ACL规则优先级上的docs)。

您可以编写更具体的ACL规则来传递它(访问相关模型上的docs)。

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

另一种选择(在这种情况下可能更方便和安全)是在$owner上使用动态Todo角色(<{3>} 动态角色)。

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

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