EntitySubqueueAccessControlHandler.php in Entityqueue 8        
                          
                  
                        
  
  
  
  
  
File
  src/EntitySubqueueAccessControlHandler.php
  
    View source  
  <?php
namespace Drupal\entityqueue;
use Drupal\Core\Access\AccessResult;
use Drupal\Core\Entity\EntityAccessControlHandler;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\entityqueue\Entity\EntityQueue;
class EntitySubqueueAccessControlHandler extends EntityAccessControlHandler {
  
  protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) {
    
    switch ($operation) {
      case 'view':
        return AccessResult::allowedIfHasPermission($account, 'access content');
        break;
      case 'update':
        return AccessResult::allowedIfHasPermissions($account, [
          "update {$entity->bundle()} entityqueue",
          'manipulate all entityqueues',
          'administer entityqueue',
        ], 'OR');
        break;
      case 'delete':
        $can_delete_subqueue = AccessResult::allowedIf(!$entity
          ->getQueue()
          ->getHandlerPlugin()
          ->hasAutomatedSubqueues());
        $access_result = AccessResult::allowedIfHasPermissions($account, [
          "delete {$entity->bundle()} entityqueue",
          'manipulate all entityqueues',
          'administer entityqueue',
        ], 'OR')
          ->andIf($can_delete_subqueue)
          ->addCacheableDependency($entity
          ->getQueue());
        return $access_result;
        break;
      default:
        
        return AccessResult::neutral();
    }
  }
  
  protected function checkCreateAccess(AccountInterface $account, array $context, $entity_bundle = NULL) {
    $access_result = AccessResult::allowedIfHasPermissions($account, [
      "create {$entity_bundle} entityqueue",
      'manipulate all entityqueues',
      'administer entityqueue',
    ], 'OR');
    if ($entity_bundle) {
      $queue = EntityQueue::load($entity_bundle);
      $access_result = AccessResult::allowedIf(!$queue
        ->getHandlerPlugin()
        ->hasAutomatedSubqueues());
      $access_result
        ->addCacheableDependency($queue);
    }
    return $access_result;
  }
}