cryptography Assignment, Exercises of Cryptography and System Security

Assignment i have Implemented on Blockchain

Typology: Exercises

2022/2023

Uploaded on 08/03/2023

mirza-mohd-junaid
mirza-mohd-junaid 🇮🇳

4 documents

1 / 3

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
Name : Mirza Mohammed Junaid
Roll No : 9459
Branch : AI&DS
Assignment 3
Q. Role-Based Access Control (RBAC): Design a smart contract with multiple user roles (e.g.,
admin, manager, user ). Implement modifiers for each role to enforce access control,
allowing specific functions to be executed only by users with the appropriate role.
Code :
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract RBAC {
address public admin;
mapping(address => bool) public managers;
mapping(address => bool) public users;
modifier onlyAdmin() {
require(msg.sender == admin, "Only admin can execute this function.");
_;
}
modifier onlyManager() {
require(managers[msg.sender], "Only manager can execute this function.");
_;
}
modifier onlyUser() {
require(users[msg.sender], "Only user can execute this function.");
_;
}
constructor() {
admin = msg.sender;
}
function addManager(address _manager) public onlyAdmin {
managers[_manager] = true;
}
function removeManager(address _manager) public onlyAdmin {
managers[_manager] = false;
}
pf3

Partial preview of the text

Download cryptography Assignment and more Exercises Cryptography and System Security in PDF only on Docsity!

Name : Mirza Mohammed Junaid

Roll No : 9459

Branch : AI&DS

Assignment 3

Q. Role-Based Access Control (RBAC): Design a smart contract with multiple user roles (e.g.,

admin, manager, user ). Implement modifiers for each role to enforce access control,

allowing specific functions to be executed only by users with the appropriate role.

Code :

// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract RBAC { address public admin; mapping(address => bool) public managers; mapping(address => bool) public users; modifier onlyAdmin() { require(msg.sender == admin, "Only admin can execute this function."); _; } modifier onlyManager() { require(managers[msg.sender], "Only manager can execute this function."); _; } modifier onlyUser() { require(users[msg.sender], "Only user can execute this function."); _; } constructor() { admin = msg.sender; } function addManager(address _manager) public onlyAdmin { managers[_manager] = true; } function removeManager(address _manager) public onlyAdmin { managers[_manager] = false; }

function addUser(address _user) public onlyAdmin { users[_user] = true; } function removeUser(address _user) public onlyAdmin { users[_user] = false; } function adminFunction() public onlyAdmin { // Only admin can execute this function emit Log("Admin function executed."); } function managerFunction() public onlyManager { // Only manager can execute this function emit Log("Manager function executed."); } function userFunction() public onlyUser { // Only user can execute this function emit Log("User function executed."); } event Log(string message); }

Output :