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