乐趣区

FISCO-BCOS-角色权限模型的实现

引言

FISCO BCOS 的权限管制是通过管制账号对系统中表的写权限来实现的。这种权限管制模型非常灵活且弱小,用户简直能够管制任意一项权限,例如,通过管制权限表的写权限治理调配权限;通过控制系统合约所对应表的写权限治理链配置、节点身份治理、合约部署、用户表创立等;通过管制合约表的写权限治理合约写接口的调用。

然而,相对完满是不存在的。弱小灵便的权限管制也带来较高的学习老本:用户须要了解每个权限项管制的内容以及如何设置,理解链管理员和系统管理员的区别……大量的概念和操作,对用户要求极高。

为了升高应用难度,晋升用户体验,FISCO BCOS v2.5 对此性能进行了优化,新增了基于角色的权限管制。把不同的权限统归到不同角色,用户依据账号所属角色即可判断其所领有的权限。同时 v2.5 基于角色引入了链上治理投票模型,使治理操作更加不便。

什么是角色权限模型?

应用角色权限模型后,用户只需记住角色,而角色对应的权限不言自明,例如,治理委员会委员领有链治理相干权限,这极大升高用户了解难度与学习老本。

角色对应的权限

区块链上的参与者,可依据角色分为治理方、运维方、监管方和业务方。为防止既当裁判又当运动员,治理方、运维方应权责拆散,角色互斥。

  • 治理方:角色称为治理委员会委员,简称委员,负责区块链治理。
  • 运维方:负责区块链运维,该角色由委员增加。
  • 业务方:业务方账号由运维增加到某个合约,能够调用该合约的写接口。
  • 监管方:监管方监管链的运行,可能获取链运行中权限变更记录以及须要审计的数据。

各角色所对应权限具体如下表所示。

角色权限实现的细节

本大节将简略介绍委员、运维和业务角色的权限实现细节以及背地原理,以便更好了解与应用角色权限性能。

链初始无委员账号,当存在至多一个委员账号时,委员领有的权限开始受到管制。联盟链理论利用中多个参与方的技术实力可能并不相同,从理论利用场景登程,咱们引入了链上治理投票模型,所有治理操作须要无效投票数 / 委员数 > 失效阈值能力失效,用户通过新增的链治理预编译合约能够实现委员的增删、权重批改、投票失效阈值批改等操作。

投票模型有几处值得注意:

  • 每次投票操作,如果是委员投票,则记录操作内容和投票委员,不反复计票
  • 每次投票操作,计票完结后,计算无效投票数 / 委员数,如果大于此操作的失效阈值,则对应操作失效
  • 投票设置过期工夫,依据块高,blockLimit 的 10 倍,固定不可改

运维角色的新增与撤销必须由委员角色操作。链初始无运维账号,当存在至多一个运维账号时,运维领有的权限开始受到管制。

业务账号能够调用链上查问接口与运维指定合约的写接口。

兼容性阐明

目前,角色权限模型基于对系统中各类表的写权限管制。咱们做了最大致力与之前版本应用体验保持一致,但为了权限管制的残缺谨严,对 FISCO BCOS v2.5 新建链,控制台 grantPermissionManager 指令不再无效,原 PermissionManager 的权限归属于委员角色。对于 v2.5 之前的链,该指令依然无效。

如何应用角色权限?

本节将以“委员增删”和“运维增删”为例进行简要的实操演示,文档含括了更丰盛的角色权限相干操作,欢送移步查看。

https://fisco-bcos-documentat…_CN/latest/docs/manual/permission_control.html

增删委员

应用控制台 v1.0.10 以上版本中自带的 get_account.sh 脚本,生成 3 个如下账号,接下来的操作以这 3 个账号为例演示。配置好控制台后,应用控制台的 -pem 选项别离加载 3 个私钥启动 3 个控制台。

# 账号 1
0x61d88abf7ce4a7f8479cff9cc1422bef2dac9b9a.pem
# 账号 2
0x85961172229aec21694d742a5bd577bedffcfec3.pem
# 账号 3
0x0b6f526d797425540ea70becd7adac7d50f4a7c0.pem

增加账号 1 为委员

减少委员须要链治理委员会投票,有效票大于阈值才可失效。此处因为只有账号 1 是委员,所以账号 1 投票即可失效。

使 用账号 1 增加账号 2 为委员

此处因为只有账号 1 是委员,所以应用账号 1 投票后,满足阈值判断立即失效。

撤销账号 2 的委员权限

此时零碎中有账号 1 和账号 2 两个委员,默认投票失效阈值 50%,所以须要两个委员都投票撤销账号 2 的委员权限,有效票 / 总票数 =2/2=1>0.5 才满足条件。

账号 1 投票撤销账号 2 的委员权限,如下图:

增删运维

委员能够增加与撤销运维角色,运维角色的权限包含部署合约、创立表、解冻冻结所部署的合约、应用 CNS 服务等。

应用账号 1 增加账号 3 为运维

应用账号 3 部署 HelloWorld

账号 3 是运维角色,能够部署合约,具体操作如下图:

应用账号 1 部署 HelloWorld

账号 1 是委员,不具备部署合约的权限,部署合约失败,如下图:

应用账号 1 撤销账号 3 的运维权限

账号 1 是委员能够撤销运维,如下图:

总结

作为联盟链的重要个性,权限管制须要做到灵便且弱小,但如何在此基础上达成良好的用户体验,须要一直地改良优化。

FISCO BCOS v2.5 前的权限管制实现了灵便且弱小的性能,但同时,社区也收到不少反馈,认为权限管制的应用了解门槛过高。通过角色权限,咱们心愿能在放弃原有性能的同时,升高学习门槛、晋升大家的应用体验。整合优化权限管制的工作仍在进行,心愿将来能实现从底层到利用全笼罩的权限管制解决方案。

欢送大家独特探讨交换,踊跃反馈应用体验与改良倡议。

FISCO BCOS 的代码齐全开源且收费下载地址↓↓↓

https://github.com/FISCO-BCOS…

退出移动版