/** * {@inheritdoc} */ public function fieldAccess($operation, FieldDefinitionInterface $field_definition, AccountInterface $account = NULL, FieldItemListInterface $items = NULL, $return_as_object = FALSE) { $account = $this->prepareUser($account); // Get the default access restriction that lives within this field. $default = $items ? $items->defaultAccess($operation, $account) : AccessResult::allowed(); // Get the default access restriction as specified by the access control // handler. $entity_default = $this->checkFieldAccess($operation, $field_definition, $account, $items); // Combine default access, denying access wins. $default = $default->andIf($entity_default); // 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' => $default); $hook_implementations = $this->moduleHandler()->getImplementations('entity_field_access'); foreach ($hook_implementations as $module) { $grants = array_merge($grants, array($module => $this->moduleHandler()->invoke($module, 'entity_field_access', array($operation, $field_definition, $account, $items)))); } // Also allow modules to alter the returned grants/denies. $context = array('operation' => $operation, 'field_definition' => $field_definition, 'items' => $items, 'account' => $account); $this->moduleHandler()->alter('entity_field_access', $grants, $context); $result = $this->processAccessHookResults($grants); return $return_as_object ? $result : $result->isAllowed(); }
/** * {@inheritdoc} */ public function fieldAccess($operation, FieldDefinitionInterface $field_definition, AccountInterface $account = NULL, FieldItemListInterface $items = NULL) { $account = $this->prepareUser($account); // Get the default access restriction that lives within this field. $default = $items ? $items->defaultAccess($operation, $account) : TRUE; // 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' => $default); $hook_implementations = $this->moduleHandler()->getImplementations('entity_field_access'); foreach ($hook_implementations as $module) { $grants = array_merge($grants, array($module => $this->moduleHandler()->invoke($module, 'entity_field_access', array($operation, $field_definition, $account, $items)))); } // Also allow modules to alter the returned grants/denies. $context = array('operation' => $operation, 'field_definition' => $field_definition, 'items' => $items, 'account' => $account); $this->moduleHandler()->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; }