You are here

function content_access_node_access_records in Content Access 8

Same name and namespace in other branches
  1. 5 content_access.module \content_access_node_access_records()
  2. 6 content_access.module \content_access_node_access_records()
  3. 7 content_access.module \content_access_node_access_records()

Implements hook_node_access_records().

File

./content_access.module, line 80
Content access module file.

Code

function content_access_node_access_records(NodeInterface $node) {
  if (content_access_disabling() || !$node
    ->isPublished()) {
    return;
  }

  // Apply per node settings if necessary.
  if (content_access_get_settings('per_node', $node
    ->getType())) {
    $grants = [];
    foreach ([
      'view',
      'update',
      'delete',
    ] as $op) {
      foreach (content_access_get_rids_per_node_op($op, $node) as $rid) {
        $gid = content_access_get_role_gid($rid);
        $grants[$gid]['grant_' . $op] = 1;
      }
    }
    foreach ($grants as $gid => $grant) {
      $grants[$gid] = content_access_proccess_grant($grant, $gid, $node);
    }

    // Care for the author grant.
    $grant = [];
    foreach ([
      'view',
      'update',
      'delete',
    ] as $op) {

      // Get all roles that have access to use $op on this node.
      $per_node_settings = content_access_per_node_setting($op, $node);
      $any_roles = array_combine($per_node_settings, $per_node_settings);
      $any_roles = $any_roles ? $any_roles : [];
      $any_roles += $op != 'view' ? content_access_get_settings($op, $node
        ->getType()) : [];
      $grant['grant_' . $op] = content_access_own_op($node, $any_roles, content_access_get_rids_per_node_op($op . '_own', $node));
    }
    if (array_filter($grant)) {
      $grant['realm'] = 'content_access_author';
      $grants[] = content_access_proccess_grant($grant, $node
        ->getOwnerId(), $node);
    }
  }
  else {

    // Apply the content type defaults.
    $grants = content_access_get_type_grant($node);
  }
  if (empty($grants)) {

    // This means we grant no access.
    $grants[] = content_access_proccess_grant([], 0, $node);
  }
  else {
    content_access_optimize_grants($grants, $node);
  }
  return $grants;
}