【问题标题】:loopback ACL for user model用户模型的环回 ACL
【发布时间】:2017-02-10 10:27:28
【问题描述】:

我正在使用环回为 SPA 网站创建一个简单的 API。我想让我的权限尽可能简单,所以我最终得到了以下 ACL 模型

  • 默认拒绝所有权限
  • 多个模型中的某些方法允许所有人使用
  • 任何授权用户都可以使用所有方法

如果我将创建多个用户并且没有人将能够再创建或修改用户,这显然会起作用。由于我无法显式更改内置 User 模型的权限,因此我创建了一个扩展 Useradmin 模型。然后我将User 模型的public 属性设置为false。我设置了以下 ACL 规则

{
  "accessType": "*",
  "principalType": "ROLE",
  "principalId": "$everyone",
  "permission": "DENY"
},
{
  "accessType": "EXECUTE",
  "principalType": "ROLE",
  "principalId": "$everyone",
  "permission": "ALLOW",
  "property": "login"
},
{
  "accessType": "*",
  "principalType": "ROLE",
  "principalId": "$authenticated",
  "permission": "ALLOW"
}

在我看来,它应该拒绝任何未经授权的用户访问login 以外的任何方法。

不幸的是,它不是这样工作的,任何人仍然可以 POST 到 /users 并创建新用户。我的猜测是 ACL 规则不适用于继承模型,因此这里应用了 User 的规则。所以我回到第一方,我不能直接更改User 权限或覆盖它们。

我在这里有什么选择?有没有办法阻止创建新用户?

【问题讨论】:

    标签: node.js acl loopbackjs strongloop


    【解决方案1】:

    事实证明,规则细节比继承级别更重要。在这种情况下,User 模型专门为create 属性定义了一个规则。尽管拒绝规则是在扩展的admin 模型中定义的,但此规则优先于更一般的拒绝所有属性。所以我不得不从 User 模型中获取所有允许的规则,并在 admin 中明确拒绝它们。

    【讨论】:

      【解决方案2】:

      几天前我遇到了同样的问题,我找到了这个解决方案。 loopback 默认 POST /Users 规则是每个人都可以插入用户。因此,您的管理模型继承自用户模型,因此规则也被继承。我们将不得不覆盖您的管理模型中的创建权限。 Loopback User model Default permission for POST

      只需在 common/models/admin.json 中的 acl 中放下面的对象

      ...
       acl : [{
        "principalType": "ROLE",
        "principalId": "$everyone",
        "permission": "DENY",
        "property": "create"
      },{
        "principalType": "ROLE",
        "principalId": "$authenticated",
        "permission": "ALLOW",
        "property": "create"
      }]
      ...
      

      因此,您首先通过覆盖默认规则拒绝访问 $everyone,并为仅能够发布的 $authenticated 设置规则。 您可以根据您的要求设置规则。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-18
        • 2016-07-13
        • 2016-07-01
        • 2017-08-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多