SubscriptionAccessControlHandler.php in Mailing List 8
File
src/SubscriptionAccessControlHandler.php
View source
<?php
namespace Drupal\mailing_list;
use Drupal\Core\Entity\EntityAccessControlHandler;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Access\AccessResult;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Field\FieldDefinitionInterface;
class SubscriptionAccessControlHandler extends EntityAccessControlHandler {
protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) {
if ($account
->hasPermission('administer mailing list subscriptions')) {
return AccessResult::allowed()
->cachePerPermissions();
}
if ($operation == 'view label') {
$operation = 'view';
}
$list_id = $entity
->getListId();
if (!$entity
->isActive() && !$account
->hasPermission("access inactive {$list_id} mailing list subscriptions")) {
return AccessResult::forbidden();
}
$is_owner = $account
->id() == $entity
->getOwnerId();
if ($account
->isAnonymous() || !$is_owner) {
$is_owner = \Drupal::service('mailing_list.manager')
->hasSessionAccess($entity);
}
if ($account
->hasPermission("{$operation} any {$list_id} mailing list subscriptions") || $is_owner && $account
->hasPermission("subscribe to {$list_id} mailing list")) {
return AccessResult::allowed();
}
return AccessResult::neutral();
}
protected function checkCreateAccess(AccountInterface $account, array $context, $entity_bundle = NULL) {
return AccessResult::allowedIf($account
->hasPermission('administer mailing list subscriptions') || $account
->hasPermission("subscribe to {$entity_bundle} mailing list"))
->cachePerPermissions();
}
protected function checkFieldAccess($operation, FieldDefinitionInterface $field_definition, AccountInterface $account, FieldItemListInterface $items = NULL) {
if ($operation == 'edit') {
$administrative_fields = [
'uid',
'created',
'status',
];
if (in_array($field_definition
->getName(), $administrative_fields, TRUE)) {
return AccessResult::allowedIfHasPermission($account, 'administer mailing list subscriptions');
}
}
return parent::checkFieldAccess($operation, $field_definition, $account, $items);
}
}