可以区分同一业务网络中的两个独立组织吗?

时间:2018-05-25 21:54:29

标签: hyperledger-fabric hyperledger-composer

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

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

有没有办法在权限文件中添加规则,以便只有org1的管理员可以创建Mailers,而只有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
}

2 个答案:

答案 0 :(得分:0)

如果你看一下ACL语言的文档,你会发现这篇文章描述了condition

  

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

所以在我看来,正确的方法是尝试使用此功能,并了解如何将基于javascript的逻辑注入ACL文件。

答案 1 :(得分:0)

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

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