权限控制
主要类为Ownable 和AccessControl,AccessControl管理角色
<<interface>>
IAccessControl
<<abstract>>
AccessControl
- _roles: mapping(bytes32 role => RoleData)
<<abstract>>
Context
<<abstract>>
Ownable - address _owner
RoleData
- bytes32 adminRole
- hasRole:mapping(address account => bool)
Ownable 包含修改器onlyOwner
go
modifier onlyOwner() {
_checkOwner();
_;
}
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
AccessControl包含修改器onlyRole
go
modifier onlyRole(bytes32 role) {
_checkRole(role);
_;
}
function _checkRole(bytes32 role) internal view virtual {
_checkRole(role, _msgSender());
}
function _checkRole(bytes32 role, address account) internal view virtual {
if (!hasRole(role, account)) {
revert AccessControlUnauthorizedAccount(account, role);
}
}