【学习记录】FISCO BCOS之账户权限控制:基于角色的权限控制

参考教程:账户权限控制 — FISCO BCOS v2.9.0 文档 (fisco-bcos-documentation.readthedocs.io)https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/manual/permission_control.html

基于角色的权限控制 — FISCO BCOS v2.9.0 文档 (fisco-bcos-documentation.readthedocs.io)https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/design/security_control/chain_governance.htmlFISCO的账户权限控制分为基于角色的权限控制和基于表的权限控制。本文内容是基于角色的权限控制

本博客仅用于个人记录学习过程,对于更详尽全面的教程内容、需求与设计等,请参考官方文档而非本文。


操作系统:centOS 7.5

FISCO版本:2.9.2

控制台所在目录:~/fisco/console

2.5.0版本开始,提供一种基于角色的权限控制模型,原来的链管理员相当于当前的治理委员会委员角色,拥有链治理相关的操作权限。用户不需要去具体关注底层系统表对应的权限,只需要关注角色的权限即可。

控制台1.x版本和2.6+版本返回的信息略有区别,官方使用的应该是1.x版本的控制台,但这并不影响学习参考。


权限控制示例账户

新建账户1,并登录。

# 打开终端,创建账户1(当前目录在~/fisco/console下)
./get_account.sh

# 创建成功后,打开一个新的终端,登录这个账户1(当前目录在~/fisco/console下)
# 命令为:./start.sh 1 -pem ${对应账户的Private Key}
# 每个Private Key都不同,根据自己生成的Private Key去启动(不要直接拷贝示例的)
./start.sh 1 -pem accounts/0xbc16c434fc0acb250c7d63a747db83bbd6877861.pem

使用PEM格式私钥文件启动

  • 使用指定的pem文件的账户启动,输入参数:群组号、-pem、pem文件路径

./start.sh 1 -pem accounts/0xebb824a1122e587b17701ed2e512d8638dfb9c88.pem

 账户2,、账户3同理。

一、委员角色

委员新增、撤销与查询

链初始状态,没有任何权限账户记录。

我们添加账户1、账户2为委员,账户3为普通用户。

进行如下测试:账户3不能操作委员权限,而账户1、2可以。

委员的权限包括治理投票、增删节点、冻结解冻合约、冻结解冻账号、修改链配置和增删运维账号。

添加账户1为委员

# 在账户1对应的FISCO控制台下输入命令,注意要输入账户1的Account Address
grantCommitteeMember 0xbc16c434fc0acb250c7d63a747db83bbd6877861

# 查看委员会成员,返回对应的地址和enable_num
listCommitteeMembers

 在官方文档中,返回"code":0;而2.9.2(也就是我使用的这个版本)code返回为1。

这是因为控制台版本不同造成的情况:控制台1.x版本下返回code为0;而控制台2.6+版本下,投票且决议通过(即生效)时返回code为1,投票但票数不够(因此决议没有通过,操作暂未生效)返回code为0。

grantCommitteeMember

添加治理委员会委员,如果当前没有委员,则直接添加成功,否则判断投票账号是否有权限投票,如有则记录投票并检查投票是否生效。参数:

  • 账号地址:投票添加该账号为委员

 使用账户1添加账户2为委员

增加委员需要链治理委员会投票,有效票大于阈值才可以生效。

# 在账户1对应的FISCO控制台下输入命令,注意要输入账户2的Account Address
grantCommitteeMember 0x4b32511e2c32d0872cb6537a1a1d94a32e6640f1

# 查看委员会成员,可发现此次添加是成功的
listCommitteeMembers

 在官方文档中,返回"code":0;而2.9.2版本code返回为1。

验证账号3无权限执行委员操作

在账号3的控制台中尝试进行链配置操作:

# 运行setSystemConfigByKey,以键值对方式设置系统参数
# tx_count_limit:区块最大打包交易数
setSystemConfigByKey tx_count_limit 100

撤销账号2的委员权限 

由于默认投票生效阈值50%,两位委员的票数默认为1,需要两位委员都投票同意(有效票/总票数=2/2=1>0.5,超过阈值),才可以撤销账号2的委员权限。

账号1投票撤销账号2的委员权限
# 在账号1的控制台下:
revokeCommitteeMember 0x4b32511e2c32d0872cb6537a1a1d94a32e6640f1

# 查看委员会成员,可发现账号2仍然是委员
listCommitteeMembers

账号2投票撤销账号2的委员权限
# 在账号2的控制台下:
revokeCommitteeMember 0x4b32511e2c32d0872cb6537a1a1d94a32e6640f1

# 查看委员会成员,可发现账号2不再是委员
listCommitteeMembers

 在官方文档中,返回"code":0;而2.9.2版本code返回为1(后文不再强调)。

委员权重修改

再在上述基础上,添加账户3为委员。然后更新委员1的票数为2。

由于默认投票生效阈值50%,两位委员的票数默认为1,需要两位委员都投票同意(有效票/总票数=2/2=1>0.5,超过阈值),才可以更新委员1的票数为2。

使用账号1的控制台添加账号3为委员

# 在账号1的控制台下:
revokeCommitteeMember 0xc69914674e8ddde4f0b602373d8f2dc7ec5a6e67

使用账号1的控制台投票更新账号1的票数为2

#在账户1的控制台下:
updateCommitteeMemberWeight 0xbc16c434fc0acb250c7d63a747db83bbd6877861 2

#查看账号1的票数(我这里忘查看了,就没截图)
queryCommitteeMemberWeight 0xbc16c434fc0acb250c7d63a747db83bbd6877861

使用账号3的控制台投票更新账号1的票数为2

#在账户2的控制台下:
updateCommitteeMemberWeight 0xbc16c434fc0acb250c7d63a747db83bbd6877861 2

#查看账号1的票数(我这里忘查看了,就没截图)
queryCommitteeMemberWeight 0xbc16c434fc0acb250c7d63a747db83bbd6877861

委员投票生效阈值修改 

账户1和账户3为委员,账号1有2票,账号3有1票。

使用账号1添加账号2为委员,由于2/3>0.5所以直接生效。

使用账号1和账号2,更新生效阈值为75%。

 我之前以为阈值是根据委员权重的变更自动变更的,但其实这需要我们自己设定……

账户1添加账户2为委员
#在账号1控制台下:
grantCommitteeMember 0x4b32511e2c32d0872cb6537a1a1d94a32e6640f1

使用账户1控制台投票更新生效阈值为75%
#在账号1控制台下:
updateThreshold 75

#查看阈值
queryThreshold

使用账户2控制台投票更新生效阈值为75%
#在账号2控制台下:
updateThreshold 75

#查看阈值
queryThreshold

updateThreshold

投票更新生效阈值,判断投票账号是否是委员,是则计票并判断是否生效。参数:

  • 生效阈值:取值范围[0,99]

二、运维角色

运维新增、撤销与查询

委员可以添加运维。

运维角色的权限包括部署合约、创建表、冻结解冻所部署的合约、使用CNS服务。

基于职责权限分离的设计,委员角色不能兼有运维的权限。

 生成一个新的账号4

# 打开终端,创建账户4(当前目录在~/fisco/console下)
./get_account.sh

添加账号4为运维角色

#可以在委员(例如账户1)的控制台下添加添加运维角色
grantOperator 0x1b9b037494640505bb9523727dab7f1425c2c29e

#查看运维成员
listOperators

使用运维账号(账户4)部署HelloWorld

# 打开一个新的终端,在目录~/fisco/console下登录账户4
./start.sh 1 -pem accounts/0x1b9b037494640505bb9523727dab7f1425c2c29e.pem

#在账户4的控制台下部署合约HelloWorld
deploy HelloWorld

使用账号1(委员)部署HelloWorld

由于委员角色不能兼有运维的权限,所以账号1(委员)部署HelloWorld失败

#在账户1的控制台下,尝试部署合约HelloWorld
deploy HelloWorld

账号1(委员)撤销账号4(运维)的运维权限

#在账户1的控制台下:
revokeOperator 0x1b9b037494640505bb9523727dab7f1425c2c29e

#查看运维成员:
listOperators

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值