如何使用Loopback ACL模型/表?

时间:2016-09-24 11:27:08

标签: node.js acl loopbackjs

我正在尝试为我的其余API设置访问控制。 Loopback为处理基于用户/角色/主体的访问提供了一个很好的起点。

但是,如果我想要的不仅仅是提供的东西,例如,模型实例的多个所有者?将条目添加到ACL表是否足够?或者我应该创建一个新的角色/解析器,如果是,我可以/应该重用现有的ACL模型/表还是自己创建?

环回很棒,但是文档缺乏深度,最终会让你阅读源代码。

1 个答案:

答案 0 :(得分:2)

在这种特殊情况下,我建议创建一个自定义角色解析器。

这样的事情:

Role.registerResolver('$inOwners', function (role, ctx, callback) {
  ctx.model.count({
    id: ctx.modelId,

    // This only works for mongo db...
    owners: ctx.accessToken.userId
  }, function(err, count) {
    if (err) {
      callback(err);
    } else if (count) {
      callback();
    } else {
      callback(new Error('Not Owner'));
    }
  });
});

然后你可以将它添加到acls中(在模型静态acls中,在json文件中,或者将其添加到ACL表中):

{
  "accessType": "*",
  "principalType": "ROLE",
  "principalId": "$inOwners",
  "permission": "ALLOW",
  "property": "*",
  "model": "*"
}

请记住,每当对环回方法的访问取决于文档/行中的内容时,您只能使用角色解析器为其定义ACL,否则您必须创建自己的ACL系统。