Access
Smart contract access utilities and implementations
This directory contains utility contracts to restrict access control in smart contracts. These include:
AccessManagerLight: A simpler version of an AccessManager that usesbytes8roles to allow function calls identified by their 4-bytes selector.
AccessManager
import "@openzeppelin/community-contracts/access/manager/AccessManagerLight.sol";Light version of an AccessManager contract that defines bytes8 roles
that are stored as requirements (see AccessManagerLight.getRequirements) for each function.
Each requirement is a bitmask of roles that are allowed to call a function
identified by its bytes4 selector. Users have their permissioned stored
as a bitmask of roles they belong to.
The admin role is a special role that has access to all functions and can manage the roles of other users.
Modifiers
Functions
- constructor(admin)
 - canCall(caller, target, selector)
 - getGroups(user)
 - getGroupAdmins(group)
 - getRequirements(target, selector)
 - addGroup(user, group)
 - remGroup(user, group)
 - _addGroup(user, group)
 - _remGroup(user, group)
 - setGroupAdmins(group, admins)
 - _setGroupAdmins(group, admins)
 - setRequirements(target, selectors, groups)
 - _setRequirements(target, selector, groups)
 - ADMIN_ROLE()
 - PUBLIC_ROLE()
 - ADMIN_MASK()
 - PUBLIC_MASK()
 
IAuthority
Events
onlyRole(Masks.Mask requirement)
internal
#Throws if the specified requirement is not met by the caller's permissions (see AccessManagerLight.getGroups).
constructor(address admin)
public
#Initializes the contract with the admin as the first member of the admin group.
canCall(address caller, address target, bytes4 selector) → bool
public
#Returns whether the caller has the required permissions to call the target with the selector.
getGroups(address user) → Masks.Mask
public
#Returns the groups that the user belongs to.
getGroupAdmins(uint8 group) → Masks.Mask
public
#Returns the admins of the group.
getRequirements(address target, bytes4 selector) → Masks.Mask
public
#Returns the requirements for the target and selector.
addGroup(address user, uint8 group)
public
#Adds the user to the group. Emits AccessManagerLight.GroupAdded event.
remGroup(address user, uint8 group)
public
#Removes the user from the group. Emits AccessManagerLight.GroupRemoved event.
_addGroup(address user, uint8 group)
internal
#Internal version of AccessManagerLight.addGroup without access control.
_remGroup(address user, uint8 group)
internal
#Internal version of AccessManagerLight.remGroup without access control.
setGroupAdmins(uint8 group, uint8[] admins)
public
#Sets the admins of the group. Emits AccessManagerLight.GroupAdmins event.
_setGroupAdmins(uint8 group, Masks.Mask admins)
internal
#Internal version of AccessManagerLight._setGroupAdmins without access control.
setRequirements(address target, bytes4[] selectors, uint8[] groups)
public
#Sets the groups requirements for the selectors of the target.
_setRequirements(address target, bytes4 selector, Masks.Mask groups)
internal
#Internal version of AccessManagerLight._setRequirements without access control.
ADMIN_ROLE() → uint8
public
#PUBLIC_ROLE() → uint8
public
#ADMIN_MASK() → Masks.Mask
public
#PUBLIC_MASK() → Masks.Mask
public
#GroupAdded(address indexed user, uint8 indexed group)
event
#GroupRemoved(address indexed user, uint8 indexed group)
event
#GroupAdmins(uint8 indexed group, Masks.Mask admins)
event
#RequirementsSet(address indexed target, bytes4 indexed selector, Masks.Mask groups)
event
#MissingPermissions(address user, Masks.Mask permissions, Masks.Mask requirement)
error
#