You are here

function permissions_by_term_node_access_records in Permissions by Term 8

Same name and namespace in other branches
  1. 8.2 permissions_by_term.module \permissions_by_term_node_access_records()

Implements hook_node_access_records().

Permissions can be rebuild at /admin/reports/status/rebuild.

File

./permissions_by_term.module, line 296
Allows access to terms in a vocabulary to be limited by user or role.

Code

function permissions_by_term_node_access_records(\Drupal\node\NodeInterface $node) {

  // Do not return any grants for nodes that this module doesn't manage.
  if (!$node
    ->isPublished()) {
    return;
  }
  $has_term_access_restrictions = FALSE;

  /* @var \Drupal\permissions_by_term\Service\AccessStorage $access_storage */
  $access_storage = \Drupal::service('permissions_by_term.access_storage');
  foreach ($access_storage
    ->getTidsByNid($node
    ->id()) as $tid) {

    /* @var \Drupal\permissions_by_term\Service\AccessCheck $access_check_service */
    $access_check_service = \Drupal::service('permissions_by_term.access_check');
    if ($node
      ->language()
      ->getId() == 'und') {

      // Current system default language
      $language = \Drupal::languageManager()
        ->getCurrentLanguage()
        ->getId();
    }
    else {
      $language = $node
        ->language()
        ->getId();
    }
    if ($access_check_service
      ->isAnyPermissionSetForTerm($tid, $language)) {
      $has_term_access_restrictions = TRUE;
      break;
    }
  }
  if (!$has_term_access_restrictions) {
    return;
  }

  /**
   * @var \Drupal\permissions_by_term\Service\NodeAccess $nodeAccess
   */
  $nodeAccess = \Drupal::service('permissions_by_term.node_access');
  $grantObject = $nodeAccess
    ->createGrant($node
    ->id(), $node
    ->id());
  $grants[] = [
    'realm' => $grantObject->realm,
    'gid' => $grantObject->gid,
    'grant_view' => $grantObject->grant_view,
    'grant_update' => $grantObject->grant_update,
    'grant_delete' => $grantObject->grant_delete,
    'nid' => $node
      ->id(),
  ];
  return $grants;
}