public function LatestRevisionCheck::access in Drupal 8
Same name and namespace in other branches
- 9 core/modules/content_moderation/src/Access/LatestRevisionCheck.php \Drupal\content_moderation\Access\LatestRevisionCheck::access()
Checks that there is a pending revision available.
This checker assumes the presence of an '_entity_access' requirement key in the same form as used by EntityAccessCheck.
Parameters
\Symfony\Component\Routing\Route $route: The route to check against.
\Drupal\Core\Routing\RouteMatchInterface $route_match: The parametrized route.
\Drupal\Core\Session\AccountInterface $account: The current user account.
Return value
\Drupal\Core\Access\AccessResultInterface The access result.
See also
\Drupal\Core\Entity\EntityAccessCheck
File
- core/
modules/ content_moderation/ src/ Access/ LatestRevisionCheck.php, line 55
Class
- LatestRevisionCheck
- Access check for the entity moderation tab.
Namespace
Drupal\content_moderation\AccessCode
public function access(Route $route, RouteMatchInterface $route_match, AccountInterface $account) {
// This tab should not show up unless there's a reason to show it.
$entity = $this
->loadEntity($route, $route_match);
if ($this->moderationInfo
->hasPendingRevision($entity)) {
// Check the global permissions first.
$access_result = AccessResult::allowedIfHasPermissions($account, [
'view latest version',
'view any unpublished content',
]);
if (!$access_result
->isAllowed()) {
// Check entity owner access.
$owner_access = AccessResult::allowedIfHasPermissions($account, [
'view latest version',
'view own unpublished content',
]);
$owner_access = $owner_access
->andIf(AccessResult::allowedIf($entity instanceof EntityOwnerInterface && $entity
->getOwnerId() == $account
->id()));
$access_result = $access_result
->orIf($owner_access);
}
return $access_result
->addCacheableDependency($entity);
}
return AccessResult::forbidden('No pending revision for moderated entity.')
->addCacheableDependency($entity);
}