// SPDX-License-Identifier: MIT pragma solidity 0.8.17; import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; abstract contract AccessControl is AccessControlUpgradeable { // role definition bytes32 public constant UPGRADER_ROLE = keccak256("UPGRADER_ROLE"); bytes32 public constant STAFF_ROLE = keccak256("STAFF_ROLE"); modifier onlyAdmin() { require( hasRole(DEFAULT_ADMIN_ROLE, msg.sender), "Only Admin can perform action" ); _; } modifier onlyUpgrader() { require( hasRole(UPGRADER_ROLE, msg.sender), "Only UPGRADER can perform action" ); _; } modifier onlyStaff() { require( hasRole(DEFAULT_ADMIN_ROLE, msg.sender) || hasRole(STAFF_ROLE, msg.sender), "Only Admin can perform action" ); _; } }