You are here

function entity_access_by_field_node_access_records in Open Social 8.8

Same name and namespace in other branches
  1. 8.9 modules/custom/entity_access_by_field/entity_access_by_field.module \entity_access_by_field_node_access_records()
  2. 8 modules/custom/entity_access_by_field/entity_access_by_field.module \entity_access_by_field_node_access_records()
  3. 8.2 modules/custom/entity_access_by_field/entity_access_by_field.module \entity_access_by_field_node_access_records()
  4. 8.3 modules/custom/entity_access_by_field/entity_access_by_field.module \entity_access_by_field_node_access_records()
  5. 8.4 modules/custom/entity_access_by_field/entity_access_by_field.module \entity_access_by_field_node_access_records()
  6. 8.5 modules/custom/entity_access_by_field/entity_access_by_field.module \entity_access_by_field_node_access_records()
  7. 8.6 modules/custom/entity_access_by_field/entity_access_by_field.module \entity_access_by_field_node_access_records()
  8. 8.7 modules/custom/entity_access_by_field/entity_access_by_field.module \entity_access_by_field_node_access_records()
  9. 10.3.x modules/custom/entity_access_by_field/entity_access_by_field.module \entity_access_by_field_node_access_records()
  10. 10.0.x modules/custom/entity_access_by_field/entity_access_by_field.module \entity_access_by_field_node_access_records()
  11. 10.1.x modules/custom/entity_access_by_field/entity_access_by_field.module \entity_access_by_field_node_access_records()
  12. 10.2.x modules/custom/entity_access_by_field/entity_access_by_field.module \entity_access_by_field_node_access_records()

Implements hook_node_access_records().

File

modules/custom/entity_access_by_field/entity_access_by_field.module, line 60
Entity Access By Field module file.

Code

function entity_access_by_field_node_access_records(NodeInterface $node) {
  $grants = [];

  // Get the field definitions of the node.
  $field_definitions = $node
    ->getFieldDefinitions();

  /* @var \Drupal\Core\Field\FieldConfigInterface $field_definition */
  foreach ($field_definitions as $field_name => $field_definition) {

    // Lets add a node access realm if the field is implemented.
    if ($field_definition
      ->getType() === 'entity_access_field') {
      $field_values = $node
        ->get($field_name)
        ->getValue();
      if (!empty($field_values)) {
        foreach ($field_values as $field_value) {
          if (isset($field_value['value'])) {
            $entityAccessPermissions = \Drupal::getContainer()
              ->get('entity_access_by_field.permissions');
            $realm = $entityAccessPermissions
              ->getRealmForFieldValue('view', 'node', $node
              ->getType(), $field_name, $field_value['value']);
            if ($node
              ->isPublished()) {
              $grants[] = [
                'realm' => $realm,
                'gid' => ENTITY_ACCESS_BY_FIELD_ALLOWED_REALM,
                'grant_view' => 1,
                'grant_update' => 0,
                'grant_delete' => 0,
                'priority' => 0,
              ];
            }
            $grants[] = [
              'realm' => $realm . '_author',
              'gid' => $node
                ->getOwnerId(),
              'grant_view' => 1,
              'grant_update' => 1,
              'grant_delete' => 1,
              'priority' => 0,
            ];
          }
        }
      }
    }
  }
  return $grants;
}