You are here

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

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

Parameters

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

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

Return value

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

File

modules/bat_booking/src/Access/BookingAddAccessCheck.php, line 50
Contains \Drupal\bat_booking\Access\BookingAddAccessCheck.

Class

BookingAddAccessCheck
Determines access to for unit add pages.

Namespace

Drupal\bat_booking\Access

Code

public function access(AccountInterface $account, BookingBundleInterface $booking_bundle = NULL) {
  $access_control_handler = $this->entityTypeManager
    ->getAccessControlHandler('bat_booking');
  if ($account
    ->hasPermission('administer bat_booking_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 ($booking_bundle) {
    return $access_control_handler
      ->createAccess($booking_bundle
      ->id(), $account, [], TRUE);
  }
  $bundles = bat_booking_get_bundles();
  foreach ($bundles as $bundle) {
    if (bat_booking_access(bat_booking_create([
      'type' => $bundle
        ->id(),
      'uid' => 0,
    ]), 'create', $account
      ->getAccount())
      ->isAllowed()) {
      return AccessResult::allowed();
    }
  }
  return AccessResult::forbidden();
}