【问题标题】:Loopback: Multiple owners for a model with belongsTo relationLoopback:具有 belongsTo 关系的模型的多个所有者
【发布时间】:2017-10-02 22:13:53
【问题描述】:

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

我有一个名为“Page”的“PersistedModel”。我使用两个不同的模型作为“员工”和“客户”,它们都基于内置的“用户”模型。

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

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

ACL: 我只想要所有者的“写”权限。因此,我在 acls 中添加了以下内容:

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

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

我在这里做错了什么?

【问题讨论】:

  • 您是否检查过数据库的外键数据是否正确?
  • @EbrahimPasbani 是的。我已经检查过了。

标签: node.js loopbackjs strongloop


【解决方案1】:

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

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

所以基本上,我不应该创建两个基于“用户”模型的不同模型。 :(

【讨论】:

  • 这早已改变,见这里:loopback.io/doc/en/lb3/…`从这一点开始,您应该能够在扩展内置用户模型的多个用户模型上使用LoopBack访问控制`
【解决方案2】:

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

对于两个所有者,您需要编写自己的自定义角色并通过role resolver注册

【讨论】:

  • 感谢您的回复。我将尝试使用角色解析器。
  • 哇,这是有史以来最短但仍然最有价值的答案!谢谢 Ebrahim,我会尽量遵循这种风格。
【解决方案3】:

正如 loopback 所说,您应该从 User 模型扩展模型,定义角色(从 Role 模型),并通过 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" }

【讨论】:

  • 感谢您的回答。但是,在这个解决方案中,任何“客户”都可以编辑任何记录。 $owner 角色仅在用户 ID 与特定记录关联时才允许。
  • 对!如果经过身份验证的用户是记录的所有者,您可以 [loopback.io/doc/en/lb3/… 角色解析器或自定义远程方法并启用修改。
【解决方案4】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 2020-12-24
    • 2014-09-01
    • 2018-08-09
    • 2015-08-20
    • 1970-01-01
    • 2015-06-12
    相关资源
    最近更新 更多