// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./AccessControlRegistryAdminned.sol"; import "./interfaces/IAccessControlRegistryAdminnedWithManager.sol"; /// @title Contract to be inherited by contracts with manager whose adminship /// functionality will be implemented using AccessControlRegistry /// @notice The manager address here is expected to belong to an /// AccessControlRegistry user that is a multisig/DAO contract AccessControlRegistryAdminnedWithManager is AccessControlRegistryAdminned, IAccessControlRegistryAdminnedWithManager { /// @notice Address of the manager that manages the related /// AccessControlRegistry roles /// @dev The mutability of the manager role can be implemented by /// designating an OwnableCallForwarder contract as the manager. The /// ownership of this contract can then be transferred, effectively /// transferring managership. address public immutable override manager; /// @notice Admin role /// @dev Since `manager` is immutable, so is `adminRole` bytes32 public immutable override adminRole; /// @param _accessControlRegistry AccessControlRegistry contract address /// @param _adminRoleDescription Admin role description /// @param _manager Manager address constructor( address _accessControlRegistry, string memory _adminRoleDescription, address _manager ) AccessControlRegistryAdminned( _accessControlRegistry, _adminRoleDescription ) { require(_manager != address(0), "Manager address zero"); manager = _manager; adminRole = _deriveAdminRole(_manager); } }