diff --git a/core/includes/entity.api.php b/core/includes/entity.api.php index 1bf3ef083f87984110f5a7e6da695cffd6f12d36..7c9c5396875dbb806ff714f0113111dccb17ae82 100644 --- a/core/includes/entity.api.php +++ b/core/includes/entity.api.php @@ -512,56 +512,3 @@ function hook_entity_field_info_alter(&$info, $entity_type) { $info['definitions']['mymodule_text']['class'] = '\Drupal\anothermodule\EntityComputedText'; } } - -/** - * Control access to fields. - * - * This hook is invoked from \Drupal\Core\Entity\Field\Type\Field::access() to - * let modules grant or deny operations on fields. - * - * @param string $operation - * The operation to be performed. See - * \Drupal\Core\TypedData\AccessibleInterface::access() for possible values. - * @param \Drupal\Core\Entity\Field\Type\Field $field - * The entity field object on which the operation is to be performed. - * @param \Drupal\user\Plugin\Core\Entity\User $account - * The user account to check. - * - * @return bool|NULL - * TRUE if access hould be allowed, FALSE if access should be denied and NULL - * if the implementation has no opinion. - */ -function hook_entity_field_access($operation, $field, $account) { - if ($field->getName() == 'field_of_interest' && $operation == 'edit') { - return user_access('edit field of interest', $account); - } -} - -/** - * Alters the default access behaviour for a given field. - * - * Use this hook to override access grants from another module. Note that the - * original default access flag is masked under the ':default' key. - * - * @param array $grants - * An array of grants gathered by hook_entity_field_access(). The array is - * keyed by the module that defines the field's access control; the values are - * grant responses for each module (Boolean or NULL). - * @param array $context - * Context array on the performed operation with the following keys: - * - operation: The operation to be performed (string). - * - field: The entity field object (\Drupal\Core\Entity\Field\Type\Field). - * - account: The user account to check access for - * (Drupal\user\Plugin\Core\Entity\User). - */ -function hook_entity_field_access_alter(array &$grants, array $context) { - $field = $context['field']; - if ($field->getName() == 'field_of_interest' && $grants['node'] === FALSE) { - // Override node module's restriction to no opinion. We don't want to - // provide our own access hook, we only want to take out node module's part - // in the access handling of this field. We also don't want to switch node - // module's grant to TRUE, because the grants of other modules should still - // decide on their own if this field is accessible or not. - $grants['node'] = NULL; - } -} diff --git a/core/lib/Drupal/Core/Entity/Field/Type/Field.php b/core/lib/Drupal/Core/Entity/Field/Type/Field.php index 36c5f3a2ba3abe2c777e804018ec10d84d0237ef..49418a0592e72e2ebe85a575ce8786dbcc58f636 100644 --- a/core/lib/Drupal/Core/Entity/Field/Type/Field.php +++ b/core/lib/Drupal/Core/Entity/Field/Type/Field.php @@ -289,51 +289,6 @@ public function __clone() { * Implements \Drupal\Core\TypedData\AccessibleInterface::access(). */ public function access($operation = 'view', User $account = NULL) { - global $user; - if (!isset($account) && $user->uid) { - $account = user_load($user->uid); - } - // Get the default access restriction that lives within this field. - $access = $this->defaultAccess($operation, $account); - // Invoke hook and collect grants/denies for field access from other - // modules. Our default access flag is masked under the ':default' key. - $grants = array(':default' => $access); - foreach (module_implements('entity_field_access') as $module) { - $grants = array_merge($grants, array($module => module_invoke($module, 'entity_field_access', $operation, $this, $account))); - } - // Also allow modules to alter the returned grants/denies. - $context = array( - 'operation' => $operation, - 'field' => $this, - 'account' => $account, - ); - drupal_alter('entity_field_access', $grants, $context); - - // One grant being FALSE is enough to deny access immediately. - if (in_array(FALSE, $grants, TRUE)) { - return FALSE; - } - // At least one grant has the explicit opinion to allow access. - if (in_array(TRUE, $grants, TRUE)) { - return TRUE; - } - // All grants are NULL and have no opinion - deny access in that case. - return FALSE; - } - - /** - * Contains the default access logic of this field. - * - * See \Drupal\Core\TypedData\AccessibleInterface::access() for the parameter - * doucmentation. This method can be overriden by field sub classes to provide - * a different default access logic. That allows them to inherit the complete - * access() method which contains the access hook invocation logic. - * - * @return bool - * TRUE if access to this field is allowed per default, FALSE otherwise. - */ - public function defaultAccess($operation = 'view', User $account = NULL) { - // Grant access per default. - return TRUE; + // TODO: Implement access() method. Use item access. } } diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/FieldAccessTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/FieldAccessTest.php deleted file mode 100644 index f6f4e6947bb178a6fe23cda1470c8d4488ea5432..0000000000000000000000000000000000000000 --- a/core/modules/system/lib/Drupal/system/Tests/Entity/FieldAccessTest.php +++ /dev/null @@ -1,62 +0,0 @@ -<?php - -/** - * @file - * Contains \Drupal\system\Tests\Entity\FieldAccessTest. - */ - -namespace Drupal\system\Tests\Entity; - -use Drupal\simpletest\DrupalUnitTestBase; - -/** - * Tests the functionality of field access. - */ -class FieldAccessTest extends DrupalUnitTestBase { - - /** - * Modules to load code from (no schema installation needed). - * - * @var array - */ - public static $modules = array('field_sql_storage', 'system', 'text'); - - public static function getInfo() { - return array( - 'name' => 'Field access tests', - 'description' => 'Test Field level access hooks.', - 'group' => 'Entity API', - ); - } - - protected function setUp() { - parent::setUp(); - // Install field and user module schema, register entity_test text field. - $this->enableModules(array('field', 'entity_test', 'user')); - } - - /** - * Tests hook_entity_field_access() and hook_entity_field_access_alter(). - * - * @see entity_test_entity_field_access() - * @see entity_test_entity_field_access_alter() - */ - function testFieldAccess() { - $values = array( - 'name' => $this->randomName(), - 'user_id' => 1, - 'field_test_text' => array( - 'value' => 'no access value', - 'format' => 'full_html', - ), - ); - $entity = entity_create('entity_test', $values); - $this->assertFalse($entity->field_test_text->access('view'), 'Access to the field was denied.'); - - $entity->field_test_text = 'access alter value'; - $this->assertFalse($entity->field_test_text->access('view'), 'Access to the field was denied.'); - - $entity->field_test_text = 'standard value'; - $this->assertTrue($entity->field_test_text->access('view'), 'Access to the field was granted.'); - } -} diff --git a/core/modules/system/tests/modules/entity_test/entity_test.module b/core/modules/system/tests/modules/entity_test/entity_test.module index 6f94212f5a4dc6ad6c24de38eda8cbb30c691efb..2752729cc58114ba87538d2d04c28e0b62a38d18 100644 --- a/core/modules/system/tests/modules/entity_test/entity_test.module +++ b/core/modules/system/tests/modules/entity_test/entity_test.module @@ -251,26 +251,3 @@ function entity_test_entity_test_insert($entity) { throw new Exception("Test exception rollback."); } } - -/** - * Implements hook_entity_field_access(). - * - * @see \Drupal\system\Tests\Entity\FieldAccessTest::testFieldAccess() - */ -function entity_test_entity_field_access($operation, $field, $account) { - if ($field->getName() == 'field_test_text' && $field->value == 'no access value') { - return FALSE; - } -} - -/** - * Implements hook_entity_field_access_alter(). - * - * @see \Drupal\system\Tests\Entity\FieldAccessTest::testFieldAccess() - */ -function entity_test_entity_field_access_alter(array &$grants, array $context) { - $field = $context['field']; - if ($field->getName() == 'field_test_text' && $field->value == 'access alter value') { - $grants[':default'] = FALSE; - } -}