You are here

protected function TeamAppAccessHandler::checkAccess in Apigee Edge 8

Performs access checks.

This method is supposed to be overwritten by extending classes that do their own custom access checking.

Parameters

\Drupal\Core\Entity\EntityInterface $entity: The entity for which to check access.

string $operation: The entity operation. Usually one of 'view', 'view label', 'update' or 'delete'.

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

Return value

\Drupal\Core\Access\AccessResultInterface The access result.

Overrides EntityAccessControlHandler::checkAccess

File

modules/apigee_edge_teams/src/Entity/TeamAppAccessHandler.php, line 95

Class

TeamAppAccessHandler
Access handler for Team App entities.

Namespace

Drupal\apigee_edge_teams\Entity

Code

protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) {

  /** @var \Drupal\apigee_edge_teams\Entity\TeamAppInterface $entity */
  $result = parent::checkAccess($entity, $operation, $account);
  if ($result
    ->isNeutral()) {
    $result = $this
      ->checkAccessByPermissions($account);
    if ($result
      ->isNeutral()) {

      /** @var \Drupal\apigee_edge_teams\Entity\TeamInterface $team */
      $team = $this->entityTypeManager
        ->getStorage('team')
        ->load($entity
        ->getCompanyName());
      if ($team) {

        // The developer is not member of the team.
        // @see hook_apigee_edge_teams_developer_permissions_by_team_alter()
        $result = $this
          ->checkAccessByTeamMemberPermissions($team, $operation, $account);
        $this
          ->processAccessResult($result, $account);
      }
      else {

        // Probably this could never happen...
        $result = AccessResult::neutral("The team ({$entity->getCompanyName()}) that the team app ({$entity->getAppId()}) belongs does not exist.");
      }
    }
  }
  return $result;
}