You are here

public function MailchimpCampaignAccessControlHandler::access in Mailchimp 2.x

Same name and namespace in other branches
  1. 8 modules/mailchimp_campaign/src/MailchimpCampaignAccessControlHandler.php \Drupal\mailchimp_campaign\MailchimpCampaignAccessControlHandler::access()

Checks access to an operation on a given entity or entity translation.

Use \Drupal\Core\Entity\EntityAccessControlHandlerInterface::createAccess() to check access to create an entity.

Parameters

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

string $operation: The operation access should be checked for. Usually one of "view", "view label", "update" or "delete".

\Drupal\Core\Session\AccountInterface $account: (optional) The user session for which to check access, or NULL to check access for the current user. Defaults to NULL.

bool $return_as_object: (optional) Defaults to FALSE.

Return value

bool|\Drupal\Core\Access\AccessResultInterface The access result. Returns a boolean if $return_as_object is FALSE (this is the default) and otherwise an AccessResultInterface object. When a boolean is returned, the result of AccessInterface::isAllowed() is returned, i.e. TRUE means access is explicitly allowed, FALSE means access is either explicitly forbidden or "no opinion".

Overrides EntityAccessControlHandler::access

File

modules/mailchimp_campaign/src/MailchimpCampaignAccessControlHandler.php, line 18

Class

MailchimpCampaignAccessControlHandler
Access control handler for the MailchimpCampaign entity.

Namespace

Drupal\mailchimp_campaign

Code

public function access(EntityInterface $entity, $operation, AccountInterface $account = NULL, $return_as_object = FALSE) {

  /* @var $entity \Drupal\mailchimp_campaign\Entity\MailchimpCampaign */

  // Ensure the associated list/audience still exists.
  if (!$entity->mc_data) {
    \Drupal::messenger()
      ->addError($this
      ->t('Data for this campaign is missing. Were the audiences deleted? Were settings changed?'), 'error');
    return parent::access($entity, $operation, $account, $return_as_object);
  }
  $status = $entity->mc_data->status;
  $return = NULL;
  switch ($operation) {
    case 'send':
    case 'edit':
    case 'delete':
      $return = $status == MAILCHIMP_STATUS_SENT ? AccessResult::forbidden() : AccessResult::allowed();
      break;
    case 'stats':
      $return = $status == MAILCHIMP_STATUS_SENT ? AccessResult::allowed() : AccessResult::forbidden();
      break;
    default:
      $return = parent::access($entity, $operation, $account, $return_as_object);
  }
  return $return;
}