【以太坊 Solidity】管理员读写权限/访问控制/角色控制

这篇具有很好参考价值的文章主要介绍了【以太坊 Solidity】管理员读写权限/访问控制/角色控制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

摘要

在 Solidity 语言的多继承中,若多个合约共同继承一个父合约,则这多个合约 共享 父合约中的变量和函数。

1.测试的智能合约

合约继承路线如下:

1.1 权限管理合约

// SPDX-License-Identifier: GPL-3.0
// filename: authority.sol
pragma solidity ^0.8.18;  

contract Authority {
    address private OWNER;
    mapping(address => bool) private ADMIN;

    constructor() {
        OWNER = msg.sender;
        ADMIN[OWNER] = true; // !注意,此处意为授予合约拥有者管理员权限
    }

    modifier isOwner() {
        require(msg.sender == OWNER, unicode"非合约拥有者");
        _;
    }
    // 修饰函数,被修饰的函数仅管理员才可调用
    modifier isAdmin() {
        require(ADMIN[msg.sender] == true, unicode"无管理员权限");
        _;
    }

    function addAdmin(address addrs) public isOwner {
        ADMIN[addrs] = true;
    } 
    function removeAdmin(address addrs) public isOwner { 
        ADMIN[addrs] = false;
    }
}

1.2 继承权限管理合约的基类合约

// SPDX-License-Identifier: GPL-3.0
// filename: base.sol
pragma solidity ^0.8.18;  
import { Authority } from "./authority.sol";

// 继承 Authority 合约,继而使用 isAdmin() 修饰函数
contract A is Authority {
    string a = "aaa";
	// 仅管理员才可调用 getAstring()
    function getAstring() isAdmin public view returns (string memory) {
        return a;
    }
}

contract B is Authority {
    string b = "bbb"; 
    function getBstring() isAdmin public view returns (string memory) {
        return b;
    }
}

1.3 待测试的合约

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.18;  
import { A, B } from "./base.sol"; 

contract Test is A, B {  
    // 合约 Test 继承了 A 中的 a, getAstring() 以及
    //  B 中的 b, getBstring()
}

2.权限管理合约测试

2.1 正向测试:合约拥有者OWNER具有管理员权限

此时 合约 Authority 中的 构造函数 constructor() 中的 ADMIN[OWNER] = true,意为 OWNER 具有管理员权限。
经 Remix 中测试,Test 合约的部署者具有管理员权限,能正常调用继承的函数,如下:
【以太坊 Solidity】管理员读写权限/访问控制/角色控制

2.2 反向测试:合约拥有者OWNER没有管理员权限

此步测试中将 合约 Authority 中的 构造函数 constructor() 中改为 ADMIN[OWNER] = false,意为 用户 OWNER 没有了管理员权限,测试测试结果如下:
【以太坊 Solidity】管理员读写权限/访问控制/角色控制

3.总结

合约继承图:

虽然 合约 A,B,Test 都直接或间接继承了 合约 Authority,但是 合约 A,B,Test 都 “ 共享 ” 了 合约 Authority 中的 变量 ADMIN函数 isAdmin() 等。文章来源地址https://www.toymoban.com/news/detail-441233.html

到了这里,关于【以太坊 Solidity】管理员读写权限/访问控制/角色控制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux 进入和退出root管理员权限

    在Linux系统中,进入和退出root管理员权限是进行系统管理和执行敏感操作的重要过程。通过使用 su - root 和 su - 用户名 命令,我们可以在终端中切换到root用户或其他普通用户,以获取相应的权限。下面将详细介绍这两个命令的使用。 1.打开终端:首先,打开终端应用程序;

    2024年02月07日
    浏览(63)
  • windows脚本获取管理员权限修改host

    很多时候我们常常需要通过管理员权限执行脚本,脚本可能涉及到一些受保护信息的访问,我们写个简单的脚本来更改host文件,host文件就是需要管理员权限才能访问的启动脚本时先检查是否有管理员权限,如果没有就调用授权脚本进行管理员授权打开,给用户弹出需要管理

    2024年02月14日
    浏览(43)
  • Inno Setup 打包的文件以管理员权限运行

    在 Inno Setup 安装目录中找到文件 SetupLdr.e32,用软件 ResourceHacker 打开。 如下图,点开清单,找到 改为 改完点击编译,然后再保存。 在Inno Setup 的打包编译脚本Setup节点中增加 PrivilegesRequired=admin 点击编译,这样编译出来的程序在安装时,就会自动提示获取管理员权限。

    2024年02月09日
    浏览(42)
  • 设置软件以管理员权限开机自启动,MemReduct为例

    目录 一.MemReduct 1.简介 2.下载方式 二.问题描述 三.具体操作 1.在windows搜索框搜索\\\"任务计划程序\\\" 并打开  2.在右方操作栏点击创建任务  3.常规选项  4.操作选项  5.触发器选项 6.条件选项 7.启动 支持中文,是一个很方便的内存清理软件,占用空间小,效果好,支持定时清理 通过设

    2024年02月08日
    浏览(58)
  • WinForm实现管理员权限运行的三种方式

    来源:https://mp.weixin.qq.com/s/ydBWABy7kwOWxNCQu4qYMA   在visual studio开发winform程序,生成msi安装包以后,代码运行似乎没有问题。但是,若是软件安装到了C盘,软件在执行某些操作,比如写文件、读文件等操作时,有可能会因为操作系统用户权限不足导致读写不成功。关键这时候软

    2024年02月04日
    浏览(51)
  • Linux系统添加用户并授权管理员(sudo)权限

    一方面是为了安全权限考虑、也是防止误操作。另一方面也是为了保证用户平时处于普通权限下。 1、添加用户 使用useradd命令添加用户 useradd -m kingbase 2、修改密码 给新添加的用户“kingbase”设置一个密码( 注:设置密码的时候linux系统默认会有密码复杂度规则 ) passwd king

    2024年02月16日
    浏览(47)
  • Python 实现程序自动以管理员权限运行的方法

    由于Windows的安全机制,Python写的脚本缺少了管理员权限,运行就会受到一些限制。 文章介绍Python 脚本自动以管理员权限运行的方法, 也就是如果脚本不是以管理员运行,就自动提升到管理员权限。 将python提升到管理员权限运行需要调用 ShellExecute 这个API函数。 ShellExecute 函

    2024年02月12日
    浏览(51)
  • C#实现软件开机自启动(不需要管理员权限)

    目录 原理简介 使用方法 完整代码 本文参考C#/WPF/WinForm/程序实现软件开机自动启动的两种常用方法,将里面中的第一种方法做了封装成 AutoStart 类,使用时直接两三行代码就可以搞定。 自启动的原理是 将软件的快捷方式创建到计算机的自动启动目录下(不需要管理员权限)

    2024年02月11日
    浏览(53)
  • AD域允许普通用户打开需要管理员权限的软件

    公司的所有电脑都加了域,防止有些不安分的员工擅自下载及安装一些其他软件,导致电脑变卡或者中毒等,所以加了域后,安装任何软件都由IT来安装,但是这里涉及到一个问题,安装的时候需要管理员密码,但是某些软件(不在少数),不知为何在运行时竟然需要管理员

    2024年02月05日
    浏览(53)
  • 内网穿透(NAT 穿透)原理+工具(部分无需管理员权限)

    内网穿透,即 NAT(Network Address Translation) 穿透 内网穿透的 实质是内网映射 ,内网地址转换成外网地址的实现。实现过程要有端对端数据传输,也有端口转发原理。内网映射方式,可以解决无公网IP问题,及外网访问内网的通用方案。 实现内网穿透 是为了使具有某一个特定

    2024年02月09日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包