You are here

public function FieldPermissionsService::hasFieldViewAccessForEveryEntity in Field Permissions 8

Same name and namespace in other branches
  1. 8.2 src/FieldPermissionsService.php \Drupal\field_permissions\FieldPermissionsService::hasFieldViewAccessForEveryEntity()

Determines if the given account may view the field, regardless of entity.

This should only return TRUE if

$this
  ->getFieldAccess('view', $items, $account, $field_definition);

returns TRUE for all possible values of $items.

@todo Move this to an interface: either FieldPermissionsServiceInterface or a new one.

Parameters

\Drupal\Core\Session\AccountInterface $account: Account for which to check access.

\Drupal\Core\Field\FieldDefinitionInterface $field_definition: Field for which to check access.

Return value

bool The access result.

File

src/FieldPermissionsService.php, line 197

Class

FieldPermissionsService
The field permission service.

Namespace

Drupal\field_permissions

Code

public function hasFieldViewAccessForEveryEntity(AccountInterface $account, FieldDefinitionInterface $field_definition) {
  $permission_type = $this
    ->fieldGetPermissionType($field_definition
    ->getFieldStorageDefinition());
  if (in_array('administrator', $account
    ->getRoles()) || $permission_type == FieldPermissionTypeInterface::ACCESS_PUBLIC) {
    return TRUE;
  }

  // Field add to comment entity.
  if (static::isCommentField($field_definition)) {
    return TRUE;
  }

  // Pass access control to the plugin.
  $plugin = $this->permissionTypeManager
    ->createInstance($permission_type, [], $field_definition
    ->getFieldStorageDefinition());
  if ($plugin instanceof Base) {
    return $plugin
      ->hasFieldViewAccessForEveryEntity($account);
  }
  else {
    return FALSE;
  }
}