Security update to Drupal 8.4.6
[yaffs-website] / web / core / modules / media / src / MediaAccessControlHandler.php
1 <?php
2
3 namespace Drupal\media;
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
10 /**
11  * Defines an access control handler for the media entity.
12  */
13 class MediaAccessControlHandler extends EntityAccessControlHandler {
14
15   /**
16    * {@inheritdoc}
17    */
18   protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) {
19     if ($account->hasPermission('administer media')) {
20       return AccessResult::allowed()->cachePerPermissions();
21     }
22
23     $is_owner = ($account->id() && $account->id() === $entity->getOwnerId());
24     switch ($operation) {
25       case 'view':
26         $access_result = AccessResult::allowedIf($account->hasPermission('view media') && $entity->isPublished())
27           ->cachePerPermissions()
28           ->addCacheableDependency($entity);
29         if (!$access_result->isAllowed()) {
30           $access_result->setReason("The 'view media' permission is required and the media item must be published.");
31         }
32         return $access_result;
33
34       case 'update':
35         if ($account->hasPermission('update any media')) {
36           return AccessResult::allowed()->cachePerPermissions();
37         }
38         return AccessResult::allowedIf($account->hasPermission('update media') && $is_owner)
39           ->cachePerPermissions()
40           ->cachePerUser()
41           ->addCacheableDependency($entity);
42
43       case 'delete':
44         if ($account->hasPermission('delete any media')) {
45           return AccessResult::allowed()->cachePerPermissions();
46         }
47         return AccessResult::allowedIf($account->hasPermission('delete media') && $is_owner)
48           ->cachePerPermissions()
49           ->cachePerUser()
50           ->addCacheableDependency($entity);
51
52       default:
53         return AccessResult::neutral()->cachePerPermissions();
54     }
55   }
56
57   /**
58    * {@inheritdoc}
59    */
60   protected function checkCreateAccess(AccountInterface $account, array $context, $entity_bundle = NULL) {
61     return AccessResult::allowedIfHasPermissions($account, ['administer media', 'create media'], 'OR');
62   }
63
64 }