【问题标题】:can two seperate organizations on the same business network be distinguished?可以区分同一业务网络上的两个独立组织吗?
【发布时间】:2018-05-25 21:54:29
【问题描述】:

目前,我在同一个业务网络(org1 和 org2)上有两个组织,并且我在模型文件中为参与者设置了不同的角色

participant Mailer identified by workerid {
  o String workerid
}
participant Processor identified by wid {
  o String wid
}

有没有办法在权限文件中添加规则,以便只有 org1 的管理员可以创建邮件程序,只有 org2 的管理员可以创建处理器。类似于

rule enableOrg1ToCreateMailers {
  description: "Enable admin from org 1 to create Mailers"
  participant(t): "org.hyperledger.composer.system.NetworkAdmin"
  operation: CREATE
  resource: "demonetwork1.Mailer"
  condition: (t.organization.getidentifier() == "org1")
  action: ALLOW
}

【问题讨论】:

  • 上述acl 工作正常吗?如果没有,您遇到了什么错误?
  • 上面的acl没试过,写了个例子看看acl里有没有反正指定组织的。我在他们的文档中找不到任何关于 acl 指定组织的内容。

标签: hyperledger-fabric hyperledger-composer


【解决方案1】:

您的规则可能更像这样(因为“组织”不是该“系统”管理类的属性):

rule enableOrg1ToCreateMailers {
  description: "Enable admin from org 1 to create Mailers"
  participant(t): "org.hyperledger.composer.system.NetworkAdmin"
  operation: ALL  // (CREATE, READ, UPDATE, DELETE)
  resource: "demonetwork1.Mailer"
  condition: (t.getIdentifier() == "org1admin")
  action: ALLOW
}

您可能更喜欢在 org.acme.mynetwork.orgadmin 之类的东西中定义参与者实例(在模型中添加一个“组织”字段),然后使用它。

participant(t): "org.acme.mynetwork.orgadmin"

上面还有你原来的情况。

提供组织(就像您所做的那样)作为参与创建业务网络资源的业务网络参与者类的属性更有效,因此可以立即检查 ACL...而不是从另一个来源派生它是。我只添加了“ALL”——如果允许相同的业务网络管理员对这些资源等执行其他 CRUD 操作(即多于“CREATE”操作等)。

最后,这里显示了一个示例(尽管条件稍微复杂,但可以为您提供相同的原理)作为有用的参考点:Includes function in ACL condition

【讨论】:

    【解决方案2】:

    如果你查看 ACL 语言的文档,你会发现这段描述condition

    Condition 是绑定变量的布尔 JavaScript 表达式。任何在 if(...) 表达式中合法的 JavaScript 表达式都可以在这里使用。用于 ACL 规则条件的 JavaScript 表达式可以引用脚本文件中的 JavaScript 实用程序函数。这允许用户轻松实现复杂的访问控制逻辑,并在多个 ACL 规则中重复使用相同的访问控制逻辑功能。

    所以在我看来,正确的方法是试验这个功能并找出如何将基于 javascript 的逻辑注入 ACL 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 2020-02-09
      • 1970-01-01
      • 2018-09-25
      • 2013-01-22
      • 1970-01-01
      相关资源
      最近更新 更多