环回:具有belongsTo关系的模型的多个所有者

时间:2017-02-16 17:55:18

标签: node.js loopbackjs strongloop

我是环回的新手。我正在努力学习和实施ACL。

我有一个" PersistedModel"命名' Page'我使用两种不同的模式作为'员工'和'客户'都基于内置的'用户'模型。

关联: 一个页面属于' Employee'以及“客户”。两者都应该是页面的所有者。顾客&员工都有很多页面。所以,我在关系中添加了以下内容:

    "customer": {
      "type": "belongsTo",
      "model": "Customer",
      "foreignKey": "customerId"
    },
    "employee": {
      "type": "belongsTo",
      "model": "Employee",
      "foreignKey": "employeeId"
    }

ACL: 我想要'写'仅限所有者许可。所以,我在acls中添加了以下内容:

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

当我尝试补丁请求时,所有者客户的请求会成功执行。但是,所有者员工的请求会获得“授权错误”。

我在这里做错了什么?

4 个答案:

答案 0 :(得分:4)

最近更新了LoopBack文档,他们在通知中添加了这两行:(http://loopback.io/doc/en/lb3/Using-built-in-models.html#user-model

  

LoopBack在单个应用程序中不支持基于用户模型的多个模型。也就是说,您不能在单个应用程序中从内置用户模型派生多个模型。

所以基本上,我不应该创建两个基于' User'模型。 :(

答案 1 :(得分:1)

Loopback仅检查一个所有者关系here

对于两位所有者,您需要编写自己的自定义角色并按role resolver

进行注册

答案 2 :(得分:1)

正如loopback所说,你应该从用户模型扩展模型,定义角色(来自角色模型),并通过RoleMapping模型(它的内置模型)为任何用户或参与者分配角色。

例如:

  1. 从用户模型扩展模型并命名为MyUser。
  2. 创建'客户'和'员工'角色。
  3. 添加关系:

    "customer": { "type": "belongsTo", "model": "MyUser", "foreignKey": "customerId" }, "employee": { "type": "belongsTo", "model": "MyUser", "foreignKey": "employeeId" }

  4. 在MyUser模型中,添加以下ACL:

    { "accessType": "WRITE", "principalType": "ROLE", "principalId": "Customer", "permission": "ALLOW" }, { "accessType": "WRITE", "principalType": "ROLE", "principalId": "Employee", "permission": "ALLOW" }

答案 3 :(得分:1)

根据this commit(2017年9月28日发布的环回3.13.0),您可以将{ownerRelations: true}设置为