loopback-component-storage acl 401错误

时间:2016-05-18 07:09:18

标签: node.js acl loopbackjs

容器模型如下所示:

{
  "name": "container",
  "base": "Model",
  ...
  "acls": [
    {
      "principalType": "ROLE",
      "principalId": "$everyone",
      "permission": "DENY",
      "accessType": "*"
    },
    {
      "principalType": "ROLE",
      "principalId": "admin",
      "permission": "ALLOW",
      "accessType": "WRITE"
    }
  ]
}

当我向其发布图像时,它会返回401错误。我确定我以'admin'用户身份登录,因为我在json模型中使用相同的访问令牌和相同的acl发出两个请求。对于第一个(不是容器),它可以工作,但对于容器则不行。

容器ACL存在问题吗?

- - - - - - - - 编辑

从DEBUG开始= loopback:security:acl它返回:

---ACL---
model container
property *
principalType ROLE
principalId $everyone
accessType *
permission DENY
with score: 7495
---ACL---
model container
property *
principalType ROLE
principalId admin
accessType WRITE
permission ALLOW
with score: -1

"property": "*"是acl中的默认值。

对于第一个请求(不是容器),它返回相同但admin-write-allow的得分高于$ everyone - * - deny。

设置"score": -2不起作用。

1 个答案:

答案 0 :(得分:1)

你没有定义属性(基本上是一种方法),所以我猜ACl分辨率会给你的第一个和第二个提供更高的权重。

"acls": [
{
  "principalType": "ROLE",
  "principalId": "$everyone",
  "permission": "DENY",
  "accessType": "*"
},
{
  "principalType": "ROLE",
  "principalId": "admin",
  "property": "*", // Add this line
  "permission": "ALLOW",
  "accessType": "WRITE"
}
]

但是,有时候ACL很难搞清楚。我建议使用debug string来确切了解ACL系统已解决的问题:

  

在Windows上:

set DEBUG=loopback:security:acl && node .

编辑:

问题实际上来自accessType(请求的端点是EXECUTE而不是WRITE),因此ACL未按预期解析。