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告诉所有人,但它也是一样的。
我错过了什么?我无法弄明白......
感谢您的帮助......
答案 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:*
以启用相当广泛的安全日志记录非常有用。