Hyperledger Composer v0.19如何通过ACL隐藏Historian交易日志?
在Hyperledger Composer v0.19中配置ACL隐藏Historian交易日志
针对你想要限制Historian(交易日志)访问权限的需求,咱们来梳理下ACL规则的配置逻辑,并给出优化后的实现方案:
核心逻辑说明
Hyperledger Composer的ACL规则是按顺序匹配生效的——一旦请求匹配到某条规则,就会停止后续规则的检查。所以我们需要先定义更精准的「允许访问」规则,再设置兜底的「拒绝访问」规则,这样既能让用户看到自己发起的交易日志,又能隐藏其他用户的交易记录。
优化后的ACL配置
rule allowOwnHistorianRecords { description: "仅允许用户读取自己发起的交易对应的Historian记录" participant(p): "org.blockknowhow.com.Users" operation: READ resource(r): "org.hyperledger.composer.system.HistorianRecord" condition: (r.transactionInvoker.getIdentifier() == p.getIdentifier()) action: ALLOW } rule denyAllOtherHistorianAccess { description: "拒绝用户访问非自身发起的Historian记录" participant: "org.blockknowhow.com.Users" operation: READ resource: "org.hyperledger.composer.system.HistorianRecord" action: DENY }
配置细节解释
- 第一条规则:优先匹配用户的请求,只有当Historian记录里的
transactionInvoker(交易发起者)和当前用户的唯一标识符完全一致时,才允许读取这条日志。 - 第二条规则:作为兜底规则,会拒绝所有不符合第一条规则的读取请求,确保其他用户的交易日志对当前用户完全不可见。
关键注意点
- 规则顺序不能乱:一定要把「允许规则」放在「拒绝规则」前面,否则兜底的拒绝规则会先触发,导致用户连自己的交易日志都无法查看。
- 标识符匹配验证:
getIdentifier()会返回参与者的完整唯一标识(比如org.blockknowhow.com.Users#alice123),确保交易发起者和用户的标识完全匹配才能生效。 - 测试验证:配置完成后,部署业务网络并切换不同用户身份测试,确认只能查询到自己发起的交易日志,其他日志无法被获取。
内容的提问来源于stack exchange,提问作者CryptoTitan
相关产品推荐
相关产品推荐

