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);
}
}