Chris@0: /** Chris@0: * Implements hook_node_access(). Chris@0: */ Chris@0: function {{ machine_name }}_node_access(\Drupal\node\NodeInterface $node, $op, \Drupal\Core\Session\AccountInterface $account) { Chris@0: $type = $node->bundle(); Chris@0: Chris@0: switch ($op) { Chris@0: case 'create': Chris@0: return AccessResult::allowedIfHasPermission($account, 'create ' . $type . ' content'); Chris@0: Chris@0: case 'update': Chris@0: if ($account->hasPermission('edit any ' . $type . ' content', $account)) { Chris@0: return AccessResult::allowed()->cachePerPermissions(); Chris@0: } Chris@0: else { Chris@0: return AccessResult::allowedIf($account->hasPermission('edit own ' . $type . ' content', $account) && ($account->id() == $node->getOwnerId()))->cachePerPermissions()->cachePerUser()->addCacheableDependency($node); Chris@0: } Chris@0: Chris@0: case 'delete': Chris@0: if ($account->hasPermission('delete any ' . $type . ' content', $account)) { Chris@0: return AccessResult::allowed()->cachePerPermissions(); Chris@0: } Chris@0: else { Chris@0: return AccessResult::allowedIf($account->hasPermission('delete own ' . $type . ' content', $account) && ($account->id() == $node->getOwnerId()))->cachePerPermissions()->cachePerUser()->addCacheableDependency($node); Chris@0: } Chris@0: Chris@0: default: Chris@0: // No opinion. Chris@0: return AccessResult::neutral(); Chris@0: } Chris@0: }