Hyperledger fabric 同一业务网络上的两个独立组织是否可以区分?

Hyperledger fabric 同一业务网络上的两个独立组织是否可以区分?,hyperledger-fabric,hyperledger-composer,Hyperledger Fabric,Hyperledger Composer,目前,我在同一业务网络org1和org2上有两个组织,我在模型文件中为参与者设置了不同的角色,如下所示: participant Mailer identified by workerid { o String workerid } participant Processor identified by wid { o String wid } 是否有办法在权限文件中添加规则,以便只有来自org1的管理员可以创建邮件,只有来自org2的管理员可以创建处理器。类似于 rule enabl

目前,我在同一业务网络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语言的文档,您会发现下面这一段描述了这种情况:

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


因此,在我看来,正确的方法是尝试此功能,并找出如何将基于javascript的逻辑注入ACL文件。

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

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中定义参与者实例,并在模型中添加“organization”字段,然后使用该字段,例如

participant(t): "org.acme.mynetwork.orgadmin"
和你的原始状态

将组织作为业务网络参与者类的一个属性提供给创建业务网络资源所涉及的业务网络参与者类更有效,因此ACL会立即被检查……而不是像以前那样从另一个源派生。我只添加了“全部”-如果允许相同的业务网络管理员对此类资源等执行其他CRUD操作,即“创建”操作等


最后,这里给出了一个示例,尽管条件稍微复杂一些,但可以为您提供其他地方相同的原则,作为有用的参考点:

上面的acl是否工作?如果没有,会出现什么错误?我没有尝试上面的acl,我将其作为示例编写,以查看acl中是否有指定组织的方法。我在他们的文档中找不到acl指定组织的任何内容。