AccessControl.sol [Code Snippet]
Provides role-based permissions for administrative tasks.

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;


abstract contract AccessControl {

  mapping(bytes32 => mapping(address => bool)) private _roles;

  bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;


  event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);

  event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);


  modifier onlyRole(bytes32 role) {

    require(hasRole(role, msg.sender), "AccessControl: sender lacks role");

    _;

  }


  function hasRole(bytes32 role, address account) public view returns (bool) {

    return _roles[role][account];

  }


  function grantRole(bytes32 role, address account) public onlyRole(DEFAULT_ADMIN_ROLE) {

    _roles[role][account] = true;

    emit RoleGranted(role, account, msg.sender);

  }


  function revokeRole(bytes32 role, address account) public onlyRole(DEFAULT_ADMIN_ROLE) {

    _roles[role][account] = false;

    emit RoleRevoked(role, account, msg.sender);

  }

}

Share by: