Hyperledger Composer ACL规则配置:不同参与者账户读取权限管控
没问题,我来给你梳理下怎么配置这个ACL规则,刚好我对这类权限配置熟得很~
配置ACL规则实现Provider的账户访问限制
咱们核心需求很明确:Provider只能查看Requester的银行账户(SDTWallet),完全不能访问Consumer的账户。结合你给出的参与者模型,咱们可以通过Hyperledger Composer的ACL文件(一般命名为permissions.acl)来实现这个逻辑,具体规则如下:
1. 先补基础权限:允许所有成员查看自己的账户
先加个合理的默认规则,确保每个参与者都能访问自己的银行账户:
rule MemberCanReadOwnWallet { description: "Allow a member to read their own wallet" participant(m): "org.acme.biznet.Member" operation: READ resource(r): "org.acme.biznet.SDTWallet" condition: (r.owner.getIdentifier() == m.getIdentifier()) action: ALLOW }
2. 核心规则:允许Provider读取Requester的账户
这条规则专门给Provider开权限,让他们能访问所有Requester的SDTWallet:
rule ProviderCanReadRequesterWallet { description: "Allow Provider to read Requester's wallet" participant(p): "org.acme.biznet.Provider" operation: READ resource(r): "org.acme.biznet.SDTWallet" condition: (r.owner.getFullyQualifiedType() == "org.acme.biznet.Requester") action: ALLOW }
这里的关键是condition判断:检查钱包的所有者类型是Requester。如果需要更细粒度的控制(比如特定Provider对应特定Requester),可以在条件里加额外的关联判断,不过你没提的话,这个通用规则就够用。
3. 显式禁止:阻止Provider访问Consumer的账户
虽然默认无权限时会拒绝,但为了避免后续规则冲突,最好加这条显式禁止规则,把权限逻辑明确下来:
rule ProviderCannotReadConsumerWallet { description: "Explicitly deny Provider from reading Consumer's wallet" participant(p): "org.acme.biznet.Provider" operation: READ resource(r): "org.acme.biznet.SDTWallet" condition: (r.owner.getFullyQualifiedType() == "org.acme.biznet.Consumer") action: DENY }
额外注意点
- 要确保你的
SDTWallet模型里有指向Member的关联字段owner,比如:
这样ACL里的asset SDTWallet identified by walletId { o String walletId o String bankAccountNumber --> Member owner }r.owner才能正确关联到对应的参与者。 - ACL规则的优先级是DENY规则优先于ALLOW规则,所以这条显式DENY能保证Provider绝对无法访问Consumer的账户。
内容的提问来源于stack exchange,提问作者kerberos17
相关产品推荐
相关产品推荐

