pragma solidity ^0.6.0; import "@openzeppelin/contracts/access/AccessControl.sol"; /** * @title Hierarchy * @author Alberto Cuesta Canada * @notice Implements a dynamic role structure for Roles */ contract Hierarchy is AccessControl { event AdminRoleSet(bytes32 roleId, bytes32 adminRoleId); /// @dev Add `root` as a member of the root role. constructor (address root) public { _grantRole(DEFAULT_ADMIN_ROLE, root); } /// @dev Restricted to members of the role passed as a parameter. modifier onlyMember(bytes32 roleId) { require(hasRole(roleId, msg.sender), "Restricted to members."); _; } /// @dev Create a new role with the specified admin role. function addRole(bytes32 roleId, bytes32 adminRoleId) public onlyMember(adminRoleId) { _setRoleAdmin(roleId, adminRoleId); emit AdminRoleSet(roleId, adminRoleId); } }
0.6.0