You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,比如:
    asset SDTWallet identified by walletId {
      o String walletId
      o String bankAccountNumber
      --> Member owner
    }
    
    这样ACL里的r.owner才能正确关联到对应的参与者。
  • ACL规则的优先级是DENY规则优先于ALLOW规则,所以这条显式DENY能保证Provider绝对无法访问Consumer的账户。

内容的提问来源于stack exchange,提问作者kerberos17

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:31:08