关于Hyperledger Composer ACL管控交易发起者资产权限及示例的技术问询
在Hyperledger Composer ACL中管理交易发起者的资产READ权限
我来帮你梳理如何在Hyperledger Composer的ACL中实现交易发起者对资产的READ权限授权与撤销,同时结合官方示例拆解细节:
1. 授权交易发起者的资产READ权限
要给交易发起者授权其自有资产的READ权限,你可以编写一条带有条件判断的ACL规则,核心是关联交易发起者(INITIATOR)与资产的归属关系。示例规则如下:
rule GrantInitiatorReadOwnAsset { description: "Allow transaction initiator to read their own asset" participant(initiator): "org.example.Participant" operation: READ resource(asset): "org.example.SampleAsset" condition: (asset.owner.getIdentifier() == initiator.getIdentifier()) }
关键说明:
initiator代表触发交易的参与者,Composer会自动识别当前交易的发起方并绑定到这个变量- 条件判断确保发起者只能读取自己拥有的资产,避免越权访问
2. 撤销交易发起者的资产READ权限
撤销权限有两种常用方式,根据你的需求选择:
- 直接删除授权规则:如果是永久撤销,直接移除上面的
GrantInitiatorReadOwnAsset规则即可,这是最简洁的方式 - 临时禁用规则:如果只是临时撤销,可以修改规则条件为永远不满足的逻辑,示例如下:
rule RevokeInitiatorReadOwnAsset { description: "Revoke transaction initiator's read access to their own asset" participant(initiator): "org.example.Participant" operation: READ resource(asset): "org.example.SampleAsset" condition: (false) }
这种方式下,规则永远不会匹配任何场景,相当于临时冻结了发起者的READ权限,后续需要恢复时再修改条件即可。
官方带交易子句的条件ACL示例解析
你提到的GitHub仓库中的示例,完整的规则应该是结合资产所有者和交易发起者的权限控制,补充完整后如下:
rule SampleConditionalRuleWithTransaction { description: "Allow asset owner or transaction initiator to operate asset" participant(m): "org.example.SampleParticipant" operation: READ, CREATE, UPDATE resource(v): "org.example.SampleAsset" transaction(tx): "org.example.SampleTransaction" condition: (v.owner.getIdentifier() == m.getIdentifier()) || (tx.initiator.getIdentifier() == m.getIdentifier()) }
规则解析:
- 这条规则允许两类参与者对资产执行READ、CREATE、UPDATE操作:
- 资产的所有者(
v.owner == m) - 当前交易的发起者(
tx.initiator == m)
- 资产的所有者(
- 通过引入
transaction(tx)子句,我们可以基于交易上下文来灵活控制权限,这在需要依赖交易发起方身份的场景中非常实用
内容的提问来源于stack exchange,提问作者Brad S.
相关产品推荐
相关产品推荐

