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

Hyperledger Composer权限配置:参与者仅查看自身提交的交易

Hyperledger Composer:让参与者仅查看自身提交交易的正确权限配置

看起来你在权限规则的条件判断上踩了个小坑——想要实现Portfolio参与者只能查看自己关联的TradeInstrument交易,但当前配置下参与者请求返回空数组,管理员却能正常获取数据。核心问题出在ParticipantCanSeeOwnTransactions规则的逻辑错误上,下面一步步帮你修正:

问题根源分析

你当前的ACL规则里,condition: (v.participantInvoking.getIdentifier() == t.getIdentifier())是错误的:

  • v代表的是TradeInstrument交易资源,你的模型里交易并没有participantInvoking字段,交易里关联的参与者字段是participant(对应model.cto里的定义)
  • t是当前发起请求的Portfolio参与者,你需要对比的是交易中关联的participant和当前参与者的ID是否一致,而不是错误的字段

另外,operation: ALL权限给得太宽了,既然需求只是查看交易,应该限制为READ,遵循最小权限原则。

修正后的完整permissions.acl

替换你原有的ParticipantCanSeeOwnTransactions规则,其他保留的规则没问题:

rule ParticipantCanSeeOwnTransactions {
  description: "Allow Portfolio participants to view only their own TradeInstrument transactions"
  participant(t): "org.example.cashbalance.Portfolio"
  operation: READ
  resource(v): "org.example.cashbalance.TradeInstrument"
  condition: (v.participant.getIdentifier() == t.getIdentifier())
  action: ALLOW
}

rule NetworkAdminUser {
  description: "Grant business network administrators full access to user resources"
  participant: "org.hyperledger.composer.system.NetworkAdmin"
  operation: ALL
  resource: "**"
  action: ALLOW
}

rule NetworkAdminSystem {
  description: "Grant business network administrators full access to system resources"
  participant: "org.hyperledger.composer.system.NetworkAdmin"
  operation: ALL
  resource: "org.hyperledger.composer.system.**"
  action: ALLOW
}

rule SystemACL {
  description: "System ACL to permit all access"
  participant: "ANY"
  operation: ALL
  resource: "org.hyperledger.composer.system.**"
  action: ALLOW
}

关键修正点详解

  1. 条件逻辑修正:

    • v.participant.getIdentifier():获取当前交易关联的Portfolio参与者ID
    • t.getIdentifier():获取当前发起请求的Portfolio参与者ID
    • 两者对比后,只有交易属于当前参与者时,才允许读取
  2. 权限范围收紧:

    • 把operation: ALL改成operation: READ,只给参与者读取自身交易的权限,避免赋予修改、删除等不必要的权限
  3. 部署与验证注意事项:

    • 提交TradeInstrument交易时,务必确保交易的participant字段正确关联到发起交易的Portfolio实例(否则规则无法匹配)
    • 更新ACL后,需要重新部署业务网络,并且重启Composer REST服务器,确保新的权限规则生效

测试方法

  1. 用管理员身份提交几条关联不同Portfolio的TradeInstrument交易
  2. 切换到某个Portfolio参与者的身份,调用GET /TradeInstrument接口
  3. 验证返回结果只包含该参与者关联的交易,其他交易不会被返回

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:01:03