首页 > 解决方案 > ACL:“ImplicitMeta”规则是如何解释的?

问题描述

在 Hyperledger Fabric 中访问控制的官方文档中: https ://hyperledger-fabric.readthedocs.io/en/latest/access_control.html

ImplicitMeta 策略聚合策略的结果

当与其他规则结合使用时,ImplicitMeta 规则究竟是如何“从理论上解释”的?

例子:

Policies:
  AndPolicy:
    Type:Signature
    Rule: "AND('Org1.Peer','Org2.Peer','Org3.Peer')"
  OrPolicy:
    Type:Signature
    Rule: "OR('Org1.Peer','Org2.Peer','Org3.Peer')"
  MetaPolicy:
    Type:ImplicitMeta
    Rule: "ALL OrPolicy" 

如果我们将 MetaPolicy 的规则设置为“ANY AndPolicy”,它是否等同于 OrPolicy?

如果我们设置“ALL OrPolicy”,是不是就相当于AndPolicy?

ImplicitMetarule的语法<ALL|ANY|MAJORITY> <sub_policy>表明 sub_policy 是一元素,而Signaturerule 语法 likeA and B and C可以表示条件表达式,而不是集合。因此,这两个规则组合的确切含义对我来说似乎不清楚。

标签: hyperledger-fabrichyperledger

解决方案


我觉得我找到了答案,虽然不完整。欢迎任何更正,补充。

如果我们将 MetaPolicy 的规则设置为“ANY AndPolicy”,它是否等同于 OrPolicy?如果我们设置“ALL OrPolicy”,是不是就相当于AndPolicy?

最简洁的答案是不。

Hyperledger Fabric页面中的策略(由于某种未知原因未从任何地方链接)给了我们一些建议。

更冗长的解释:

# The lines below are just based on my conceptual understanding, 
# therefore they may have errors in details.
Channel:
  Groups:
    Application:
      Policies:
        M:             #-----------(1)
          Type: ImplicitMeta
          Rule: "ALL P"
      Groups:
        GroupA:
          Policies:
            P:         #-----------(2)              
              Type: Signature
              Rule: "OR('SampleOrg.admin')"
        GroupB:
          Policies:
            P:         #-----------(3)
              Type: Signature
              Rule: "AND('SampleOrg.member')"

在上面的配置中,

  • (1) 可以表示为/Channel/Application/M
  • (2) 可以表示为/Channel/Application/GroupA/P
  • (3) 可以表示为/Channel/Application/GroupB/P
  • 让我们看看(1)是什么意思。
    • 它的规则被指定为ALL P,它应该被解释为必须满足 M 的所有子策略。.
    • 但什么是子策略?这是这个答案的关键:根据policies.html策略隐式选择它所在组的子组。在这种情况下,位于 中,因此位于该路径下的 (2) 和 (3) 都是子策略。ImplicitMetaM/Channel/Application
    • 规则指定ImplicitMeta必须满足所有/任何/大多数规则。在上述情况下,M只有在至少一名管理员和所有成员签名的情况下才会满意。

推荐阅读