f5a81290d20e0b30d81a067538eb23cfdd2987b0
[yaffs-website] / web / modules / contrib / entityqueue / src / EntitySubqueueAccessControlHandler.php
1 <?php
2
3 namespace Drupal\entityqueue;
4
5 use Drupal\Core\Access\AccessResult;
6 use Drupal\Core\Entity\EntityAccessControlHandler;
7 use Drupal\Core\Entity\EntityInterface;
8 use Drupal\Core\Session\AccountInterface;
9 use Drupal\entityqueue\Entity\EntityQueue;
10
11 /**
12  * Defines the access control handler for the entity_subqueue entity type.
13  *
14  * @see \Drupal\entityqueue\Entity\EntitySubqueue
15  */
16 class EntitySubqueueAccessControlHandler extends EntityAccessControlHandler {
17
18   /**
19    * {@inheritdoc}
20    */
21   protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) {
22     /** @var \Drupal\entityqueue\EntitySubqueueInterface $entity */
23     switch ($operation) {
24       case 'view':
25         return AccessResult::allowedIfHasPermission($account, 'access content');
26         break;
27
28       case 'update':
29         return AccessResult::allowedIfHasPermissions($account, ["update {$entity->bundle()} entityqueue", 'manipulate all entityqueues', 'administer entityqueue'], 'OR');
30         break;
31
32       case 'delete':
33         $can_delete_subqueue = AccessResult::allowedIf(!$entity->getQueue()->getHandlerPlugin()->hasAutomatedSubqueues());
34
35         $access_result = AccessResult
36           ::allowedIfHasPermissions($account, ["delete {$entity->bundle()} entityqueue", 'manipulate all entityqueues', 'administer entityqueue'], 'OR')
37           ->andIf($can_delete_subqueue);
38
39         return $access_result;
40         break;
41
42       default:
43         // No opinion.
44         return AccessResult::neutral();
45     }
46   }
47
48   /**
49    * {@inheritdoc}
50    */
51   protected function checkCreateAccess(AccountInterface $account, array $context, $entity_bundle = NULL) {
52     $access_result = AccessResult::allowedIfHasPermissions($account, ["create {$entity_bundle} entityqueue", 'manipulate all entityqueues', 'administer entityqueue'], 'OR');
53
54     if ($entity_bundle) {
55       $queue = EntityQueue::load($entity_bundle);
56       $access_result = AccessResult::allowedIf(!$queue->getHandlerPlugin()->hasAutomatedSubqueues());
57     }
58
59     return $access_result;
60   }
61
62 }