【问题标题】:How to use Loopback ACL model/table?如何使用 Loopback ACL 模型/表?
【发布时间】:2016-09-25 01:33:38
【问题描述】:

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

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

Loopback 很棒,但文档缺乏深度,最终您只能阅读源代码。

【问题讨论】:

    标签: node.js acl loopbackjs


    【解决方案1】:

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

    类似这样的:

    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 系统。

    【讨论】:

    • 谢谢! :)。我是否正确理解这一点,因为 ACL 表基本上“只是”模型 json 文件中指定的内容的持久性?您的示例使用模型中的一个字段,该字段将包含对象的所有者。如果我想要更多控制权,例如个体实例的所有者、编辑者、查看者,这可能会进入一个新的“instance_acl”表?
    • 是的。您将 ACL 表用于动态内容(例如,管理员可以管理其他用户的权限),而这些在模型 json 文件中,仅用于静态内容。要获得更多控制,您可以创建更具体的 acl 条目,也可以在角色解析器中添加更多逻辑。
    猜你喜欢
    • 1970-01-01
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多