diff --git a/core/modules/field/lib/Drupal/field/Plugin/Type/Formatter/FormatterBase.php b/core/modules/field/lib/Drupal/field/Plugin/Type/Formatter/FormatterBase.php
index 5a23fa4..2666409 100644
--- a/core/modules/field/lib/Drupal/field/Plugin/Type/Formatter/FormatterBase.php
+++ b/core/modules/field/lib/Drupal/field/Plugin/Type/Formatter/FormatterBase.php
@@ -105,7 +105,7 @@ public function view(EntityInterface $entity, $langcode, array $items) {
         '#theme' => 'field',
         '#weight' => $this->weight,
         '#title' => $instance['label'],
-        '#access' => field_access($field, 'view', $entity_type, $entity),
+        '#access' => field_access('view', $field, $entity_type, $entity),
         '#label_display' => $this->label,
         '#view_mode' => $this->viewMode,
         '#language' => $langcode,
diff --git a/core/modules/field/lib/Drupal/field/Tests/FieldAccessTest.php b/core/modules/field/lib/Drupal/field/Tests/FieldAccessTest.php
new file mode 100644
index 0000000..07fdc8b
--- /dev/null
+++ b/core/modules/field/lib/Drupal/field/Tests/FieldAccessTest.php
@@ -0,0 +1,82 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\field\Tests\FieldAccessTest.
+ */
+
+namespace Drupal\field\Tests;
+
+class FieldAccessTest extends FieldTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array('node', 'field_test');
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Field access tests',
+      'description' => 'Test Field access.',
+      'group' => 'Field API',
+    );
+  }
+
+  function setUp() {
+    parent::setUp();
+
+    $web_user = $this->drupalCreateUser(array('view test_view_field content'));
+    $this->drupalLogin($web_user);
+
+    // Create content type.
+    $this->content_type_info = $this->drupalCreateContentType();
+    $this->content_type = $this->content_type_info->type;
+
+    $this->field = array(
+      'field_name' => 'test_view_field',
+      'type' => 'text',
+    );
+    field_create_field($this->field);
+    $this->instance = array(
+      'field_name' => $this->field['field_name'],
+      'entity_type' => 'node',
+      'bundle' => $this->content_type,
+      'widget' => array(
+        'type' => 'text_textfield',
+      ),
+      'display' => array(
+        'default' => array(
+          'type' => 'text_default',
+        ),
+      ),
+    );
+    field_create_instance($this->instance);
+
+    // Create test node.
+    $this->test_view_field_value = 'This is some text';
+    $settings = array();
+    $settings['type'] = $this->content_type;
+    $settings['title'] = 'Field view access test';
+    $settings['test_view_field'] = array(LANGUAGE_NOT_SPECIFIED => array(array('value' => $this->test_view_field_value)));
+    $this->node = $this->drupalCreateNode($settings);
+  }
+
+  /**
+   * Test that hook_field_access() is called.
+   */
+  function testFieldAccess() {
+
+    // Assert the text is visible.
+    $this->drupalGet('node/' . $this->node->nid);
+    $this->assertText($this->test_view_field_value);
+
+    // Assert the text is not visible for anonymous users.
+    // The field_test module implements hook_field_access() which will
+    // specificaly target the 'test_view_field' field.
+    $this->drupalLogout();
+    $this->drupalGet('node/' . $this->node->nid);
+    $this->assertNoText($this->test_view_field_value);
+  }
+}
diff --git a/core/modules/field/tests/modules/field_test/field_test.field.inc b/core/modules/field/tests/modules/field_test/field_test.field.inc
index 44d22c1..f47ccad 100644
--- a/core/modules/field/tests/modules/field_test/field_test.field.inc
+++ b/core/modules/field/tests/modules/field_test/field_test.field.inc
@@ -188,5 +188,12 @@ function field_test_field_access($op, $field, $entity_type, $entity, $account) {
   if ($field['field_name'] == "field_no_{$op}_access") {
     return FALSE;
   }
+
+  // Only grant view access to test_view_field fields when the user has
+  // 'view test_view_field content' permission.
+  if ($field['field_name'] == 'test_view_field' && $op == 'view' && !user_access('view test_view_field content')) {
+    return FALSE;
+  }
+
   return TRUE;
 }
diff --git a/core/modules/field/tests/modules/field_test/field_test.module b/core/modules/field/tests/modules/field_test/field_test.module
index 8c25b1d..6d3195c 100644
--- a/core/modules/field/tests/modules/field_test/field_test.module
+++ b/core/modules/field/tests/modules/field_test/field_test.module
@@ -28,6 +28,10 @@ function field_test_permission() {
       'title' => t('Access field_test content'),
       'description' => t('View published field_test content.'),
     ),
+    'view test_view_field content' => array(
+      'title' => t('View test field content'),
+      'description' => t('View published test_view_field content.'),
+    ),
     'administer field_test content' => array(
       'title' => t('Administer field_test content'),
       'description' => t('Manage field_test content'),
