6. 权限

交易执行权限主要针对模块的交易执行合约的执行权限控制,权限struct主要由以下几个属性组成:

  • 资源名称(Resource = ModuleName MsgType):由模块名称和消息类型,针对某个交易消息进行权限检查。例如:member addOrg

      问题:msgType对使用用户不友好,后期改为根据用户操作命令行Resource = ModuleName cmndPath或者rest路径来指定权限。
    
  • 策略:ACCEPT/DROP,白名单或黑名单模式。

  • Status:参考组织中状态转换,模块相关的权限修改需要网络管理员提案与投票,合约权限。

  • 合约管理员:可以由合约上传者指定,管理员和合约者可以修改合约执行权限,不需要投票。未来考虑管理组 + 读写权限等。

  • 权限表达式列表:每个权限表达式,由组织表达式列表和角色ID列表构成,权限的判断由组织表达式列表和角色ID列表的笛卡尔积决定(组织表达式是或的关系,角色ID是或的关系),返回值为bool类型true为通过,false为拒绝。权限表达式之间是或的关系,增加权限表达式意味着放宽权限的范围。

    • 组织表达式支持精确匹配和模糊匹配,精确匹配形如org1.dep1.group1,模糊匹配支持***通配符,*代表该层级的任意组织名,**匹配任意深度的组织名。**匹配任意Level组织。org1.dep1.group1匹配举例:

      org1.dep1.*
      *.*.group1
      org1.**(适配org1,本身及其所有子组织)
      **.group1
      

      代码示例见:x/member/types/org_test.go

    • 完整的全新表达式举例:

      (org1.*, org2.**.h) & (peer, client) || org1  & peer || org2 & client || org2&member || **&client