Node.js 需要帮助了解环回中的ACL吗

Node.js 需要帮助了解环回中的ACL吗,node.js,loopbackjs,strongloop,Node.js,Loopbackjs,Strongloop,我创建了一个名为“ShippingAddresses”的模型,它具有以下ACL规则 [ { "accessType": "*", "principalType": "ROLE", "principalId": "$everyone", "permission": "DENY" }, { "accessType": "READ", "principalType": "ROLE", "prin

我创建了一个名为“ShippingAddresses”的模型,它具有以下ACL规则

[
    {
      "accessType": "*",
      "principalType": "ROLE",
      "principalId": "$everyone",
      "permission": "DENY"
    },
    {
      "accessType": "READ",
      "principalType": "ROLE",
      "principalId": "$owner",
      "permission": "ALLOW"
    },
    {
      "accessType": "EXECUTE",
      "principalType": "ROLE",
      "principalId": "$authenticated",
      "permission": "ALLOW",
      "property": "create"
    },
    {
      "accessType": "WRITE",
      "principalType": "ROLE",
      "principalId": "$owner",
      "permission": "ALLOW"
    }
  ]
当我通过对端点/api/shipping_地址进行POST调用来创建记录时,它工作得非常好,但当我对同一端点/api/shipping_地址发出GET请求时,它不工作

另外,为了补充说明,我已经定义了ShippingAddresses模型与Account(inherits User)的关系。关系是:用户->有多个ShippingAddress,ShippingAddress->属于帐户


我阅读了关于回送官方文档的ACL文档,但我迷路了。一切似乎都设置正确,但仍然需要401:授权。

问题在于将权限设置为仅$owner时的读取权限。它的意思是:只有模型实例的所有者才能查看该实例。因此,只有当您为与所有者(用户)相关的实例传递id时,它才会起作用,即与findById()相同。

还要记住,在使用模型实例的所有权时,必须将它们与“belongsTo”关联起来。它将要做的是向模型实例添加userId,以便环回知道该模型实例属于谁。此外,它还创建了新的rest端点。例如:

User.modelname.create()  //this way modelname instance is created for User.
                         //User is the owner of current modelname instance.
否则,如果希望允许所有人访问GETrest端点,请使用以下ACL

[
    {
      "accessType": "*",
      "principalType": "ROLE",
      "principalId": "$everyone",
      "permission": "DENY"
    },
    {
      "accessType": "READ",
      "principalType": "ROLE",
      "principalId": "$everyone",
      "permission": "ALLOW"
    },
    {
      "accessType": "EXECUTE",
      "principalType": "ROLE",
      "principalId": "$authenticated",
      "permission": "ALLOW",
      "property": "create"
    },
    {
      "accessType": "WRITE",
      "principalType": "ROLE",
      "principalId": "$owner",
      "permission": "ALLOW"
    }
  ]

ACL是环回框架的一个特性。 与其他框架相比,它对nodejs开发非常有用。 请参阅您的问题将正确创建,因为模型将更改角色。 首先,您提到了环回的身份验证和身份验证

将为models/script.js添加编码

环回ACL毁了我半天的时间

我的问题是另一个问题(关于错误的角色映射数据),但我认为使其工作的过程是相同的

我的解决方案:

  • 仔细阅读-->无法找出任何错误
  • 启用
    DEBUG=loopback:security:
    -->(在控制台中)Lb告诉我它无法获取角色映射
  • 检查mongo表。我的角色映射是
    string
    ,而不是mongo的
    ObjectID
  • 解决
  • @achitverma问题:

    {
      "accessType": "*",
      "principalType": "ROLE",
      "principalId": "$everyone",
      "permission": "DENY"
    },
    {
      "accessType": "READ",
      "principalType": "ROLE",
      "principalId": "$owner",
      "permission": "ALLOW"
    },
    
    上述配置表明
    $owner ALLOW READ
    优先于
    $everybody DENY*

    如果设置了DEBUG,我可以看到如下内容:

    loopback:security:acl with score: 7495 +0ms
    
    因此,
    7495
    是每个配置的分数,将选择最大的分数

    但是当我在相同的端点/api/shipping\u地址上发出GET请求时 它不起作用了

    肯定是因为当前用户不是
    $owner