You are here

public function CustomAccess::hasFieldAccess in Field Permissions 8

Same name and namespace in other branches
  1. 8.2 src/Plugin/FieldPermissionType/CustomAccess.php \Drupal\field_permissions\Plugin\FieldPermissionType\CustomAccess::hasFieldAccess()

Determine if access to the field is granted for a given account.

Parameters

string $operation: The operation to check. Either 'view' or 'edit'.

\Drupal\Core\Entity\EntityInterface $entity: The entity the field is attached to.

\Drupal\Core\Session\AccountInterface $account: The user to check access for.

Return value

bool The access result.

Overrides FieldPermissionTypeInterface::hasFieldAccess

File

src/Plugin/FieldPermissionType/CustomAccess.php, line 30

Class

CustomAccess
Defines custom access for fields.

Namespace

Drupal\field_permissions\Plugin\FieldPermissionType

Code

public function hasFieldAccess($operation, EntityInterface $entity, AccountInterface $account) {
  assert(in_array($operation, [
    "edit",
    "view",
  ]), 'The operation is either "edit" or "view", "' . $operation . '" given instead.');
  $field_name = $this->fieldStorage
    ->getName();
  if ($operation === 'edit' && $entity
    ->isNew()) {
    return $account
      ->hasPermission('create ' . $field_name);
  }
  if ($account
    ->hasPermission($operation . ' ' . $field_name)) {
    return TRUE;
  }
  else {

    // User entities don't implement `EntityOwnerInterface`.
    if ($entity instanceof UserInterface) {
      return $entity
        ->id() == $account
        ->id() && $account
        ->hasPermission($operation . ' own ' . $field_name);
    }
    elseif ($entity instanceof EntityOwnerInterface) {
      return $entity
        ->getOwnerId() == $account
        ->id() && $account
        ->hasPermission($operation . ' own ' . $field_name);
    }
  }

  // Default to deny since access can be explicitly granted (edit field_name),
  // even if this entity type doesn't implement the EntityOwnerInterface.
  return FALSE;
}