合约中一般会有多种针对不同数据的操作:例如对于存证内容的增加、更新及查询,若不进行一套符合要求的权限控制,事实上整个合约在真实环境下是没有多少使用价值的。那么应当如何对合约的权限进行划分?我们针对Solidity语言来寻找其对应的解决方案。

一、通过地址标记解决方案

传统的数据库方式是将不同的接口进行区分标记,同时将不同角色所拥有的不同接口权限进行标记,存入数据库当中。Solidity由于本身语法能力限制不能实现较为复杂的功能。类似于Linux文件系统的操作权限,我们可以使用0和1来区分当前角色是否对该接口拥有操作权限,同时将值进行排序,组合出不同的uint代表不同的权限。例如:对当前存证内容的可更新权限及对当前存证内容可查询权限我们将其排序可以得到权限0、1、2、3四种不通过权限,二进制00、01、10和11,分别代表不可更新不可查询、不可更新可查询、可更新不可查询及可更新可查询这四种不同权限。当权限种类较少的情况下完全可以使用这种方式,用uint对不同权限值进行映射(得到权限uint字段)。之后我们对每个具体人(address)映射对应的权限字段【mapping(address => uint)】。对于一个存证内容,我们可能需要分配多个不同人物不同权限,因此不同地址可以对应不同权限,当前该存证内容应当包含拥有1、2、3三种不同权限的所有用户address,未出现address默认权限值为0。同时我们还可以对该存证内容某些权限进行开放例如:将查询权限完全开放,任何人都可以拥有查询权限即一个基础默认权限01,所有的address拥有的权限与该权限进行  |   的位运算操作得到真实操作权限。

设计数据结构:

uint count;                           //用以计数当前非0权限用户个数

mapping(uint => mapping(address => uint)) Priviledge;      //通过映射方式来实现权限标记

使用该种方法的缺点是需要对每个用户权限进行分配,事实上也可以将分配权限这个任务也作为一个权限,分配给不同的用户进行操作【包括分配权限,去除权限等】,整体可能较为复杂。

二、通过密码解决方案

可以对当前查找及更新操作进行密码标记,使用不同密码代表拥有不同的权限,同时对于密码设置可修改操作。从使用上而言方便创建者仅仅只需要通过一次密码或少数密码就可以为多数角色进行权限分配,但是可能存在密码泄露及密码遗忘等不可控原因。主要还是看合约在具体使用时对于安全性的要求及是否会使用到账户等具体实现情况。

三、其他玩法

如密码加address绑定,这样子的好处是不同进行address的传递,直接由当前用户进行权限激活即可,一个密码仅仅只能使用一次,这里需要一个记录。

转载于:https://www.cnblogs.com/tianxia2s/p/9390851.html

Solidity合约记录——(三)如何在合约中对操作进行权限控制相关推荐

  1. AspNetForums中基于角色的权限控制

    AspNetForums中基于角色的权限控制 http://blog.joycode.com/dotey/archive/2005/02/24/44791.aspx asp.net页面如何控制页面依据 ...

  2. java按钮权限控制_详解Spring Security 中的四种权限控制方式

    Spring Security 中对于权限控制默认已经提供了很多了,但是,一个优秀的框架必须具备良好的扩展性,恰好,Spring Security 的扩展性就非常棒,我们既可以使用 Spring Se ...

  3. 基于三段式命令及筛选器的rbac权限控制方案

    引用自 摸鱼wiki,点击可查看原文 1. 权限命令的表示 1.1 权限命令 采用三段式设计,将命令划分为类型.操作.属性/对象三个层级.相较于采用常量声明,这样的写法可以支持使用通配符进行设置,减少 ...

  4. Moodle中的角色与权限控制

    有关角色的概念: 角色是权限访问的集合,用于在魔灯中管理者可以在特定情境下委派特定的权限给特定的用户. 例如,您可能有一个"教师"的角色,这个角色允许教师完成一些特定的功能(而不是 ...

  5. MongoDB3.x中添加用户和权限控制

    现在需要创建一个帐号,该账号需要有grant权限,即:账号管理的授权权限.注意一点,帐号是跟着库走的,所以在指定库里授权,必须也在指定库里验证(auth) 1.在admin库中,添加用户并授权use ...

  6. 你不知道的前端·权限控制篇 之 中后台系统

    一.前言 你不知道的前端之--中后台系统的权限控制,总的来说可以分为两大类,页面权限与按钮权限. 如果说编程的职业道路就像是在游戏中打怪升级的话,那么走这个分支练级的童鞋,首先要面对的第一只劝退bos ...

  7. CSLA的权限控制如何整合到框架中

    CSLA对类的属性读写控制做的很到位. 首先在BusinessBase继承的类中继承AddAuthorizationRules函数: protected override void AddAuthor ...

  8. 区块链智能合约编程三:可发行的代币实现

    在前一章环境中,我为大家介绍了如何用solidity语言编写简单的代币.今天我为大家介绍用solidity语言去实现一种可发行的代币. 在此之前首先得了解想要发行代币,首先得遵循一个标准得协议,叫ER ...

  9. 用solidity语言开发代币智能合约

    智能合约开发是以太坊编程的核心之一,而代币是区块链应用的关键环节,下面我们来用solidity语言开发一个代币合约的实例,希望对大家有帮助. 以太坊的应用被称为去中心化应用(DApp),DApp的开发 ...

最新文章

  1. 不一样的Gradle多渠道配置总结
  2. 使用GPIO模拟I2C总线进行通信
  3. JSON 常量详情参考 (内含对中文不转义的参数)
  4. JavaScript——易班优课YOOC课群在线测试自动答题解决方案(十五)整合升级+引入jQuery
  5. Lucas定理:线性求所有逆元的方法
  6. Tomcat 服务:解决 Apache Tomcat 更新后 Tomcat9w.exe 无法启动 Tomcat 服务的问题
  7. 5月份美网络游戏用户达8700万 同比增长22%
  8. python从入门到实践答案第四章_python从入门到实践课后习题第四章
  9. 博客园-vb随笔列表
  10. 用R语言实现对不平衡数据的四种处理方法
  11. Maven插件介绍:spring-boot-maven-plugin
  12. Robo3T 1.4.3下载安装配置
  13. 魅族开售跳票,创饥饿营销新高度?
  14. win7美化_为Windows笔记本外接显示器!附实用工具/桌面美化折腾指南
  15. linux7磁盘挂载大于16T,CentOS6.5挂载超过16T的大容量存储空间,格式化为xfs
  16. hosts文件是什么? Windows、Mac、Linux的hosts文件在哪里?
  17. 850pro测试软件,三星850Pro ssd可靠性测试 6000次P/E
  18. Enchanted —— Taylor Swift
  19. 如何实现Spark SQL 字段血缘?
  20. 【NOI OJ】4977 怪盗基德的滑翔翼

热门文章

  1. win7安装MongoDB学习笔记
  2. Lync 小技巧-24-PDF 加密文件-转-Word-操作手册
  3. ORACLE 12C 依然支持 bbed
  4. Android 分享机顶盒项目的封装类《GridView》
  5. 1050. 螺旋矩阵(25)
  6. cordova + vue cli构建跨平台应用
  7. express项目创建步骤
  8. 折腾了一晚上Windows网络却未果
  9. Oracle后台进程
  10. html5关于定位功能的实现