Implementing custom access control for an entity
All entities have a set of handlers that control specific pieces of functionalities. One handler handles access control. When the access handler is not specified, the base \Drupal\Core\Entity\EntityType
module will implement \Drupal\Core\Entity\EntityAccessControlHandler
as the access handler. By default, this will check whether any modules have implemented hook_entity_create_access
or hook_entity_type_create_access
and use their opinions. Otherwise, it defaults to the admin permission for the entity type, if implemented.
In this recipe, we will provide an admin permission for our entity and implement the access handler and permission provider available through the Entity API module. We will base this on an entity called Message.
Note
This recipe specifically uses the functionality from the Entity API module because it has been tested and thoroughly reviewed and reduces boilerplate code. Ideally, this will be part of an upcoming minor release...