public function ScheduledTransitionsEntityHooks::entityAccess in Scheduled Transitions 2.x
Same name and namespace in other branches
- 8 src/ScheduledTransitionsEntityHooks.php \Drupal\scheduled_transitions\ScheduledTransitionsEntityHooks::entityAccess()
Implements hook_entity_access().
See also
\scheduled_transitions_entity_access()
File
- src/
ScheduledTransitionsEntityHooks.php, line 142
Class
- ScheduledTransitionsEntityHooks
- Entity related hooks for Scheduled Transitions module.
Namespace
Drupal\scheduled_transitionsCode
public function entityAccess(EntityInterface $entity, string $operation, AccountInterface $account) : AccessResultInterface {
// Determines if a user has access to view or add scheduled transitions for
// an entity. Users must always have the entity:bundle permission. If the
// mirror operation config is enabled then we allow via that. Otherwise if
// the mirror operation is off some custom code provided by the site must
// respond with allowed for
// ScheduledTransitionsPermissions::ENTITY_OPERATION* operations.
$access = AccessResult::neutral();
if ($operation === Permissions::ENTITY_OPERATION_VIEW_TRANSITIONS) {
$access
->cachePerPermissions();
$permission = Permissions::viewScheduledTransitionsPermission($entity
->getEntityTypeId(), $entity
->bundle());
if ($account
->hasPermission($permission)) {
$access
->addCacheTags([
SettingsForm::SETTINGS_TAG,
]);
$mirrorOperation = $this
->mirrorOperations('view scheduled transition');
if (isset($mirrorOperation)) {
$access = $access
->orIf($entity
->access($mirrorOperation, $account, TRUE));
}
}
else {
$access = $access
->andIf(AccessResult::forbidden("The '{$permission}' permission is required."));
}
}
elseif ($operation === Permissions::ENTITY_OPERATION_ADD_TRANSITION) {
$access
->cachePerPermissions();
$permission = Permissions::addScheduledTransitionsPermission($entity
->getEntityTypeId(), $entity
->bundle());
if ($account
->hasPermission($permission)) {
$access
->addCacheTags([
SettingsForm::SETTINGS_TAG,
]);
$mirrorOperation = $this
->mirrorOperations('add scheduled transition');
if (isset($mirrorOperation)) {
$access = $access
->orIf($entity
->access($mirrorOperation, $account, TRUE));
}
}
else {
$access = $access
->andIf(AccessResult::forbidden("The '{$permission}' permission is required."));
}
}
if ($operation === Permissions::ENTITY_OPERATION_RESCHEDULE_TRANSITIONS) {
$access
->cachePerPermissions();
$permission = Permissions::rescheduleScheduledTransitionsPermission($entity
->getEntityTypeId(), $entity
->bundle());
if ($account
->hasPermission($permission)) {
$access
->addCacheTags([
SettingsForm::SETTINGS_TAG,
]);
$mirrorOperation = $this
->mirrorOperations('reschedule scheduled transitions');
if (isset($mirrorOperation)) {
$access = $access
->orIf($entity
->access($mirrorOperation, $account, TRUE));
}
}
else {
$access = $access
->andIf(AccessResult::forbidden("The '{$permission}' permission is required."));
}
}
return $access;
}