间接模型的所有权

Ownership of an in direct model

我有一个拥有房子的用户(几个用户可以拥有房子),房子可以有几件家具。

CustomUser.json关系:

"houses": {
   "type": "hasAndBelongsToMany",
   "model": "House",
   "foreignKey": "houseId"
}

House.json关系:

"furnitures": {
   "type": "hasAndBelongsToMany",
   "model": "Furniture",
   "foreignKey": ""
},
"customUsers": {
   "type": "hasAndBelongsToMany",
   "model": "CustomUser",
   "foreignKey": ""
}

我的 ACL 很简单,房屋和家具的 ACL 看起来像这样:

"acls": [
    {
      "accessType": "*",
      "principalType": "ROLE",
      "principalId": "$everyone",
      "permission": "DENY"
    },
    {
      "accessType": "*",
      "principalType": "ROLE",
      "principalId": "admin",
      "permission": "ALLOW"
    },
    {
      "accessType": "*",
      "principalType": "ROLE",
      "principalId": "$owner",
      "permission": "ALLOW"
    }
]

现在,访问用户的房子可以正常工作,但用户不会列出他们的家具,因为他们属于房子(房子是所有者)。如何以最简单的方式解决此问题?最好是以某种方式定义用户通过房子拥有家具?不过,家具必须属于房子(因为多个用户可以拥有一个房子)。

所以我通过另一个名为 "loopback-component-access-groups" 的模块解决了这个问题,它允许您定义组。在这种特殊情况下,我将房屋模型设为用户和家具可以访问的组。一个用户可以有不同的角色,所以我只是设置用户(具有角色"member")可以访问同一组(房子)中的家具。这个解决方案对我有用,但我不完全确定如果其他对象与家具相关,它们是否继承它们属于房子。

编写我自己的角色解析器使这变得非常灵活,在角色解析器中我必须制定逻辑来找到原始父级并确保没有死关系(因为 LB 还不支持级联) .

我建议从这里开始:

https://loopback.io/doc/en/lb3/Defining-and-using-roles.html