You are here

function permissions_by_term_node_access_records in Permissions by Term 8.2

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

Implements hook_node_access_records().

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

1 call to permissions_by_term_node_access_records()
PermissionModeTest::testNodeAccessRecordCreation in tests/src/Kernel/PermissionModeTest.php

File

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

Code

function permissions_by_term_node_access_records(NodeInterface $node) {

  /**
   * @var AccessCheck $accessCheckService
   */
  $accessCheckService = \Drupal::service('permissions_by_term.access_check');

  // Do not return any grants for nodes that this module doesn't manage.
  if (\Drupal::configFactory()
    ->getEditable('permissions_by_term.settings')
    ->get('disable_node_access_records')) {
    return NULL;
  }
  if (!$accessCheckService
    ->isAnyTaxonomyTermFieldDefinedInNodeType($node
    ->getType())) {
    return NULL;
  }

  /**
   * @var \Drupal\permissions_by_term\Service\TermHandler $termHandler
   */
  $termHandler = \Drupal::service('permissions_by_term.term_handler');
  if (!\Drupal::config('permissions_by_term.settings')
    ->get('permission_mode') && empty($termHandler
    ->getTidsByNid($node
    ->id(), $node))) {
    return NULL;
  }
  $isAnyPermissionSetForTerm = FALSE;
  $tids = $termHandler
    ->getTidsByNid($node
    ->id());
  if (!empty($tids)) {
    foreach ($tids 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)) {
        $isAnyPermissionSetForTerm = TRUE;
        break;
      }
    }
  }
  if (!$isAnyPermissionSetForTerm && !\Drupal::config('permissions_by_term.settings')
    ->get('permission_mode')) {
    return null;
  }

  /**
   * @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;
}