基于角色的权限控制
当前基于表的权限控制,由于涉及到许多系统表,要求用户对底层的逻辑有一定理解,使用门槛较高。从2.5.0版本开始,基于已有的表权限控制模型,新增了ChainGovernance预编译合约,用于实现基于角色的权限控制。
角色定义
分为治理方、运维方、监管方和业务方。考虑到权责分离,治理方、运维方和开发方权责分离,角色互斥。
- 治理方:拥有投票权,可以参与治理投票(AUTH_ASSIGN_AUTH),可以增删节点、修改链配置、添加撤销运维、冻结解冻合约、对用户表的写权限控制。链级别的可变配置的权限。
- 运维方:由治理方添加运维账号,运维账号可以部署合约、创建表、管理合约版本、冻结解冻本账号部署的合约。
- 业务方:业务方账号由运维添加到某个合约,可以调用该合约的写接口。
- 监管方:监管方监管链的运行,能够获取链运行中权限变更的记录、能够获取需要审计的数据
权限
以下简称治理账号为委员。
- 权限项命名符合动宾结构。
- 增删委员、修改委员权重、修改生效阈值三个操作,需要有效投票权重/总权重>生效阈值生效。其中总权重=SUM(委员权重)
- 治理账号可以添加运维账号,但治理账号不拥有运维的权限
- 运维账号可以为某个合约添加业务账号,但运维账号没有业务账号权限
权限项
权限操作 | 控制方式 | 命名 | 默认阈值 | 修改方式 |
---|---|---|---|---|
增删委员 | 控制写权限表 | AUTHASSIGN_AUTH | 0.5 | 委员投票 |
修改委员权重 | 控制写权限表 | AUTH_ASSIGN_AUTH | 0.5 | 委员投票 |
修改生效投票阈值(投票委员权重和大于该值) | 控制写权限表 | AUTH_ASSIGN_AUTH | 0.5 | 委员投票 |
增删节点(观察/共识) | 控制写共识表 | AUTH_CTRL_NODE | 委员可操作 | |
修改链配置项 | 控制写配置表 | AUTH_MODIFY_CONFIG | 委员可操作 | |
冻结解冻合约 | 合约生命周期 | AUTH_CTRL_CONTRACT_LIFE | 委员可操作 | |
添加撤销运维 | AUTH_CTRL_OPERATOR | 委员可操作 | ||
用户表写权限 | AUTH_CTRL_USER_TABLE | 委员可操作 | ||
部署合约 | _sys_tables的写权限 | AUTHCREATE_TABLE | 运维操作 | |
创建表 | _sys_tables的写权限 | AUTH_CREATE_TABLE | 运维操作 | |
合约版本管理 | CNS | AUTH_CTRL_CNS | 运维操作 | |
冻结解冻本账号部署的合约 | 修改合约状态 | 运维操作 | ||
调用合约 | 合约表写权限 | 业务操作 |
计票与生效
- 所有治理操作需要有效投票数/委员数>生效阈值才能生效
- 每次投票操作,如果是委员投票,则记录操作内容和投票委员,不重复计票
- 每次投票操作,计票结束后,计算有效投票数/委员数,如果大于此操作的生效阈值,则对应操作生效,写入
- 投票设置过期时间,根据块高,blockLimit的10倍,固定不可改
功能列表
- 增删委员计票与生效
- 修改委员权重计票与生效
- 修改生效阈值计票与生效
- 委员增删运维
- 委员解冻冻结合约
- 委员增删节点
- 委员修改系统配置
- 权限项默认阈值存储
- 运维部署合约的权限
- 运维管理合约版本的权限
委员相关
function grantCommitteeMember(address user) public returns (int256);
function updateCommitteeMemberWeight(address user, int256 weight) public returns (int256);
function revokeCommitteeMember(address user) public returns (int256);
function listCommitteeMembers() public returns (string);
// threshold取值范围[0,100]
function updateThreshold(int256 threshold) public returns (int256);
运维相关
function grantOperator(address user) public returns (int256);
function revokeOperator(address user) public returns (int256);
function listOperator() public returns (string);
数据结构
表:_sys_committee_votes_
id | status | num | key | value | origin | enable_num |
---|---|---|---|---|---|---|
- key是账户,value记录
grant/revoke
,origin记录投票人 - key是
账户_update_weight
,value记录目标权重,origin记录投票人 - key是
账户_weight
,value记录权重 - key是
auth_threshold
,value记录当前阈值 - key是
update_auth_threshold
,value记录目标阈值,origin记录投票人
当前内容版权归 fisco-bcos.org 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 fisco-bcos.org .