You are here

public function UnitTypeAddAccessCheck::access in Booking and Availability Management Tools for Drupal 8

Checks access to the unit type add page for the type bundle.

Parameters

\Drupal\Core\Session\AccountInterface $account: The currently logged in account.

\Drupal\bat_unit\TypeBundleInterface $type_bundle: (optional) The type bundle. If not specified, access is allowed if there exists at least one type bundle for which the user may create a unit type.

Return value

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

File

modules/bat_unit/src/Access/UnitTypeAddAccessCheck.php, line 50
Contains \Drupal\bat_unit\Access\UnitTypeAddAccessCheck.

Class

UnitTypeAddAccessCheck
Determines access to for unit type add pages.

Namespace

Drupal\bat_unit\Access

Code

public function access(AccountInterface $account, TypeBundleInterface $type_bundle = NULL) {
  $access_control_handler = $this->entityTypeManager
    ->getAccessControlHandler('bat_unit_type');
  if ($account
    ->hasPermission('administer bat_type_bundle entities')) {

    // There are no type bundles defined that the user has permission to
    // create, but the user does have the permission to administer the content
    // types, so grant them access to the page anyway.
    return AccessResult::allowed();
  }
  if ($type_bundle) {
    return $access_control_handler
      ->createAccess($type_bundle
      ->id(), $account, [], TRUE);
  }
  $bundles = bat_unit_get_type_bundles();
  foreach ($bundles as $bundle) {
    if (bat_type_access(bat_type_create([
      'type' => $bundle
        ->id(),
      'uid' => 0,
    ]), 'create', $account
      ->getAccount())) {
      return AccessResult::allowed();
    }
  }
  return AccessResult::forbidden();
}