Hyperledger Composer:在多组织结构中创建参与者
Hyperledger Composer: Creating participants in a multi org fabric
我在 Fabric 网络上实现了三个组织结构。和一个单独的订购者。比方说 Org1、Org2、Org3 和 Orderer。 Org1、Org2 和 Org3 有自己的 CA 并使用 CouchDB。所有对等节点都连接到同一个通道。
这是一个贸易网络,每个组织代表一个贸易公司。为了运营,他们创建了自己的参与者以在网络中进行交易。
每个组织有两个用户将为他们的公司执行交易。
我正在使用 Composer REST 服务器访问网络。因此,这些组织中的每一个都有一个业务网络管理员,他们可以通过它在网络上创建 participants/users。
启动REST服务器,假设我使用Org1的业务网卡
- 如何确保如果 Org1 正在创建任何参与者,它只会映射到 Org1 的公司?看到这个 REST 服务器是使用 Org1 的卡设置的,如何限制 Org1 为 Org2 创建参与者?我可以使用 Composer 的 permissions.acl 文件来管理它吗?
- 有没有办法在运行时获取调用网络管理员的身份来管理它?
我在某处缺乏研究吗?任何 refrences/guidance 都会有所帮助。
假设每个组织有三个不同的管理员参与者,他们负责为各自的组织创建用户(参与者)。在这里您可以使用 acls,这样一个组织的管理员就不会创建另一个组织的用户。现在第二件事是你需要在多用户模式下启动作曲家休息服务器。为此,您需要将所有网卡存储在一个地方,然后使用一种身份验证机制,即通行证策略来访问特定的网卡。您可以参考多用户模式作曲家示例,它在作曲家教程中。尽管在这种情况下,您还需要用卡启动其余服务器,但这只是为了读取网络,只是为了生成其余部分 api 而不是进行任何交易。
添加上面@user9040429 的评论:
1) 访问控制列表(规则):控制哪些业务网络管理员(在 'trade-network' 中:例如,见下文:organization
是您建模参与者中的 field/attribute。这是 'better practice' 而不是尝试 'derive' his/her 组织,在业务网络之外(您的交易输入将允许检查参与者,从中可以得出 'his/her' 组织)
rule CreateParticipantsbyOrg {
description: "example"
participant(t): "org.hyperledger.composer.system.NetworkAdmin"
operation: ALL // (CREATE, READ, UPDATE, DELETE)
resource(r): "mybiz.domain.Traders"
condition: (t.getIdentifier() == r.organization)
action: ALLOW
}
并且在 Composer ACL 规则中 DENY 是隐式默认值,即除非明确允许 - 还要注意早期规则中的 'match' (您可以有很多规则,特别是如果它们针对相同的资源)将意味着它可能达不到这个规则来评估(因为它从上到下阅读规则)- 只是说。
2) 上面的规则应该足以满足您的 ACL 需求。但只是说在您的交易逻辑中(如果您需要访问它)您可以使用文档中此页面中显示的以下功能 -> https://hyperledger.github.io/composer/latest/business-network/programmatic-access-control - 请参阅代码示例:
getcurrentParticipant()
// 当前业务网络参与者
getcurrentIdentity()
// 身份,由 Fabric 发布,映射到上述参与者
我在 Fabric 网络上实现了三个组织结构。和一个单独的订购者。比方说 Org1、Org2、Org3 和 Orderer。 Org1、Org2 和 Org3 有自己的 CA 并使用 CouchDB。所有对等节点都连接到同一个通道。
这是一个贸易网络,每个组织代表一个贸易公司。为了运营,他们创建了自己的参与者以在网络中进行交易。
每个组织有两个用户将为他们的公司执行交易。
我正在使用 Composer REST 服务器访问网络。因此,这些组织中的每一个都有一个业务网络管理员,他们可以通过它在网络上创建 participants/users。
启动REST服务器,假设我使用Org1的业务网卡
- 如何确保如果 Org1 正在创建任何参与者,它只会映射到 Org1 的公司?看到这个 REST 服务器是使用 Org1 的卡设置的,如何限制 Org1 为 Org2 创建参与者?我可以使用 Composer 的 permissions.acl 文件来管理它吗?
- 有没有办法在运行时获取调用网络管理员的身份来管理它?
我在某处缺乏研究吗?任何 refrences/guidance 都会有所帮助。
假设每个组织有三个不同的管理员参与者,他们负责为各自的组织创建用户(参与者)。在这里您可以使用 acls,这样一个组织的管理员就不会创建另一个组织的用户。现在第二件事是你需要在多用户模式下启动作曲家休息服务器。为此,您需要将所有网卡存储在一个地方,然后使用一种身份验证机制,即通行证策略来访问特定的网卡。您可以参考多用户模式作曲家示例,它在作曲家教程中。尽管在这种情况下,您还需要用卡启动其余服务器,但这只是为了读取网络,只是为了生成其余部分 api 而不是进行任何交易。
添加上面@user9040429 的评论:
1) 访问控制列表(规则):控制哪些业务网络管理员(在 'trade-network' 中:例如,见下文:organization
是您建模参与者中的 field/attribute。这是 'better practice' 而不是尝试 'derive' his/her 组织,在业务网络之外(您的交易输入将允许检查参与者,从中可以得出 'his/her' 组织)
rule CreateParticipantsbyOrg {
description: "example"
participant(t): "org.hyperledger.composer.system.NetworkAdmin"
operation: ALL // (CREATE, READ, UPDATE, DELETE)
resource(r): "mybiz.domain.Traders"
condition: (t.getIdentifier() == r.organization)
action: ALLOW
}
并且在 Composer ACL 规则中 DENY 是隐式默认值,即除非明确允许 - 还要注意早期规则中的 'match' (您可以有很多规则,特别是如果它们针对相同的资源)将意味着它可能达不到这个规则来评估(因为它从上到下阅读规则)- 只是说。
2) 上面的规则应该足以满足您的 ACL 需求。但只是说在您的交易逻辑中(如果您需要访问它)您可以使用文档中此页面中显示的以下功能 -> https://hyperledger.github.io/composer/latest/business-network/programmatic-access-control - 请参阅代码示例:
getcurrentParticipant()
// 当前业务网络参与者
getcurrentIdentity()
// 身份,由 Fabric 发布,映射到上述参与者