Solidity合约记录——(三)如何在合约中对操作进行权限控制
合约中一般会有多种针对不同数据的操作:例如对于存证内容的增加、更新及查询,若不进行一套符合要求的权限控制,事实上整个合约在真实环境下是没有多少使用价值的。那么应当如何对合约的权限进行划分?我们针对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的传递,直接由当前用户进行权限激活即可,一个密码仅仅只能使用一次,这里需要一个记录。
Solidity合约记录——(三)如何在合约中对操作进行权限控制的更多相关文章
- Java继承多态中的方法访问权限控制
java中的方法天生具有继承多态特性,这点与C++有很大不同(需要在父类方发上加virtual关键字),但用起来确实方便了许多. 最简单的继承多态 声明一个接口BaseIF,只包含一个方法声明 pub ...
- MongoDB3.x中添加用户和权限控制
现在需要创建一个帐号,该账号需要有grant权限,即:账号管理的授权权限.注意一点,帐号是跟着库走的,所以在指定库里授权,必须也在指定库里验证(auth) ? 1 2 3 4 5 6 7 8 9 10 ...
- PHP中多IP段权限控制方案
在某些项目中我们可能会用到根据IP段进行权限校验,比如不在我们配置的IP段内的用户访问某些页面或功能模块时,将提示其权限不够并禁止访问该页面的内容.鉴于项目中需求各异,下面只说下大致思路以及我个人的实 ...
- java中使用二进制进行权限控制
基本概念 package test; publicclass Rights { publicstaticvoid main(String[] args) { int a=1; // 001 状态a i ...
- <实训|第九天>掌握linux中普通的权限控制和三种特殊的权限(sst),做合格的运维工程师
linux中,权限的学习是必不可少的,不论是作为一名运维工程师或者是单一的管理者,学习好linux中的权限控制,你就可以保护好自己的隐私同时规划好你所管理的一切. 权限的学习是很多的,不要认为自己已经 ...
- django中的权限控制(form增删改)
Django默认提供了权限控制,但只能对使用了其自带的登录认证的用户进行权限控制,说白了就是只能对存储在auth_user表中的用户进行权限控制,但不能对未登录过的用户进行权限控制.但如果通过集成LD ...
- 用solidity语言开发代币智能合约
智能合约开发是以太坊编程的核心之一,而代币是区块链应用的关键环节,下面我们来用solidity语言开发一个代币合约的实例,希望对大家有帮助. 以太坊的应用被称为去中心化应用(DApp),DApp的开发 ...
- 第一行代码:以太坊(2)-使用Solidity语言开发和测试智能合约
智能合约是以太坊的核心之一,用户可以利用智能合约实现更灵活的代币以及其他DApp.不过在深入讲解如何开发智能合约之前,需要先介绍一下以太坊中用于开发智能合约的Solidity语言,以及相关的开发和测试 ...
- 以太坊智能合约开发,Web3.js API 中文文档 ethereum web3.js入门说明
以太坊智能合约开发,Web3.js API 中文文档 ethereum web3.js入门说明 为了让你的Ðapp运行上以太坊,一种选择是使用web3.js library提供的web3.对象.底层实 ...
随机推荐
- thinkphp5 与 endroid 二维码生成
windows compser安装endroid/qrcode,自己安装好composer工具; 1. 项目目录 文件 composer.json require 里添加 "endroid/ ...
- 解决Tomcat启动时项目重复加载问题
前几天一个同学项目要上线,部署到服务器时,因为客户需要通过IP直接可以访问到,所以在server.xml做了如下的配置 导致启动tomcat时候出现一个项目重复加载了两次,很容易就出现了内存溢出. 这 ...
- 笔记:python (2015)
[开发环境]: Python 3.3 http://rj.baidu.com/soft/detail/25283.html 大小:20.2M 版本:3.3.5150 位数:64 更新日期:2014 ...
- Android开发中常见的设计模式(四)——策略模式
策略模式定义了一些列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变换. 假设我们要出去旅游,而去旅游出行的方式有很多,有步行,有坐火车,有坐飞机等等 ...
- myeclipse和jdk的安装和配置
一.安装JDK 1.下载得到jdk-8u11-windows-i586.1406279697.exe,直接双击运行安装,一直next就可以,默认是安装到系统盘下面Program Files,我这里装在 ...
- leetcode338
public class Solution { public int[] CountBits(int num) { ]; ; i <= num; i++) { ; var cur = i; do ...
- leetcode647
class Solution { public: ][],int i,int j){ if(i>=j){ return true; } else{ return DP[i][j]; } } in ...
- DJango 基础(7)
常用查询字段常用类型与模型关系表 知识点: 常用的查询 Field的常用参数 常用的模型字段类型 常用的查询 获取所有记录:rs = User.objects.all()获取第一条数据:rs = Us ...
- 绑定checkedComboBox
using System; namespace CommonLib{ /// <summary> /// CommonCode 的摘要说明. /// </summary> [S ...
- Could not GET 'https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.1.2/gradle-3
参考 https://blog.csdn.net/verkery6/article/details/80797705