communities-contracts/contracts/core/BaseModular.sol

24 lines
1.0 KiB
Solidity
Raw Normal View History

2023-01-19 11:21:41 +00:00
// SPDX-License-Identifier: Mozilla Public License 2.0
pragma solidity ^0.8.17;
import "@openzeppelin/contracts/access/AccessControlEnumerable.sol";
import "@openzeppelin/contracts/utils/Address.sol";
contract BaseModular is AccessControlEnumerable {
bytes32 public constant ADMIN_ROLE = keccak256("ADMIN_ROLE");
bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE");
bytes32 public constant BURNER_ROLE = keccak256("BURNER_ROLE");
function addModule(bytes32 role, address account) public {
require(hasRole(ADMIN_ROLE, _msgSender()), "ModularERC721: must have admin role");
require(Address.isContract(account), "ModularERC721: module must be a contract");
_grantRole(role, account);
}
function removeModule(bytes32 role, address account) public onlyRole(ADMIN_ROLE) {
require(hasRole(ADMIN_ROLE, _msgSender()), "ModularERC721: must have admin role");
_grantRole(role, account);
}
}