环回 - 在对象级别设置 ACL

Loopback - Set ACL on Object level

我已成功添加 "Class" 级 ACL,仅允许授权用户访问我的模型:

.../server/ModelObj.js

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

这很好,但我的应用程序需要更低级别的 ACL - 对象级别。

当属于角色的用户创建新对象时,该对象必须只能由具有相同角色的其他用户访问。

这是解决 Loopback 问题的方法,还是他们提供了不同的方法?

提前致谢, 杰斯帕

我认为您可能必须使用自定义 role resolver 来实现它。这个想法是创建一个角色和一个自定义解析器,并在运行时确定用户对给定模型的访问权限。这是一个部分示例(请注意,您还需要创建角色和成员等)。

// perhaps in a boot script?
app.models.Role.registerResolver('teamMember', function(role, context, cb) {
  if (context.modelName === 'ModelObj') {
    context.model.findById(context.modelId, function(err, instance) {
      if (err) { /* handle it... */ return cb(err); }
      // check the instance for something to determine access
      // execute callback with switch for access (or not)
      cb(null, true);
    }
  }
});

本周我开始 loopback mixin 以支持对象级别的 ACLS。我们需要实例级别的动态 acls,它可能会随时间变化。我们看到了您的问题并进行了搜索以找到一些 plugin/mixin/middleware 可以让某人支持这个问题,但我们一无所获。

如果您仍然对此感兴趣,我将非常高兴收到您的反馈,因为我想让这个 mixin 可以在任何地方工作,而不仅仅是在我们的产品上。

我的计划是本周推出第一个版本。从星期一开始,我在对象级创建了一个简单的同步 acl 库。后来我添加了对 loopback-mixin 的支持,并支持可以获取数据以做出决定的解析器。我想添加对制作 'sugar' 层的支持,其中一个简单的 属性 可以制作 acls。因此,如果您有一个带有 属性 "stock" 的模型,如果库存小于 1,则没有人可以调用方法 'buy'。

谢谢!