【问题标题】:Loopback $owner only仅环回 $owner
【发布时间】:2016-08-30 13:44:29
【问题描述】:

我有一个环回应用程序,每个客户都可以拥有自己的服务。因此,我需要客户只能查看、添加、编辑和删除它自己的服务。但是无论我做什么,似乎客户要么可以看到所有用户的所有服务,要么没有人可以看到没有人的服务。

服务模式

"relations": {
  "customer": {
    "type": "belongsTo",
    "model": "customer",
    "foreignKey": "customerId"
  }
}

还有我所看到的alc:

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

但是如果它像这个服务的所有者并且只有 /GET/{id} 它是服务,但它不能 /GET 所有服务?!?

如果我使用这个:

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

我有我需要的东西,但这是一个市长安全漏洞,因为每个客户都可以从所有其他客户那里获得所有服务。

【问题讨论】:

    标签: strongloop loopback


    【解决方案1】:

    您需要在service 模型中添加属性customerId,并且$owner acl 仅在:id 段存在于api url 中时才有效。

    如果您的网址没有任何:id,您可以创建自定义角色解析器。

    【讨论】:

    • 我写过我在 /{id} (/:id) 上使用 GET 覆盖了它,我知道这一点。但是,如果我不想要使用 id 的单一服务,而是使用该 $owner 的所有服务呢?
    • @Arcagully 正如我在回答中提到的,您需要 customerId 属性,并且如果您想覆盖所有忽略 id 段的服务,那么创建自定义角色解析器是一种方式
    • 我在从用户模型扩展我的 API 时遇到了同样的问题。正如答案所暗示的那样,我已经通过了 userId,但仍然所有用户都可以访问数据。你能帮我解决这个问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    • 2016-09-16
    • 2023-03-04
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多