annotate core/modules/media/src/MediaAccessControlHandler.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 1fec387a4317
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\media;
Chris@0 4
Chris@0 5 use Drupal\Core\Access\AccessResult;
Chris@0 6 use Drupal\Core\Entity\EntityAccessControlHandler;
Chris@0 7 use Drupal\Core\Entity\EntityInterface;
Chris@0 8 use Drupal\Core\Session\AccountInterface;
Chris@0 9
Chris@0 10 /**
Chris@0 11 * Defines an access control handler for the media entity.
Chris@0 12 */
Chris@0 13 class MediaAccessControlHandler extends EntityAccessControlHandler {
Chris@0 14
Chris@0 15 /**
Chris@0 16 * {@inheritdoc}
Chris@0 17 */
Chris@0 18 protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) {
Chris@0 19 if ($account->hasPermission('administer media')) {
Chris@0 20 return AccessResult::allowed()->cachePerPermissions();
Chris@0 21 }
Chris@0 22
Chris@0 23 $is_owner = ($account->id() && $account->id() === $entity->getOwnerId());
Chris@0 24 switch ($operation) {
Chris@0 25 case 'view':
Chris@0 26 $access_result = AccessResult::allowedIf($account->hasPermission('view media') && $entity->isPublished())
Chris@0 27 ->cachePerPermissions()
Chris@0 28 ->addCacheableDependency($entity);
Chris@0 29 if (!$access_result->isAllowed()) {
Chris@0 30 $access_result->setReason("The 'view media' permission is required and the media item must be published.");
Chris@0 31 }
Chris@0 32 return $access_result;
Chris@0 33
Chris@0 34 case 'update':
Chris@0 35 if ($account->hasPermission('update any media')) {
Chris@0 36 return AccessResult::allowed()->cachePerPermissions();
Chris@0 37 }
Chris@0 38 return AccessResult::allowedIf($account->hasPermission('update media') && $is_owner)
Chris@0 39 ->cachePerPermissions()
Chris@0 40 ->cachePerUser()
Chris@0 41 ->addCacheableDependency($entity);
Chris@0 42
Chris@0 43 case 'delete':
Chris@0 44 if ($account->hasPermission('delete any media')) {
Chris@0 45 return AccessResult::allowed()->cachePerPermissions();
Chris@0 46 }
Chris@0 47 return AccessResult::allowedIf($account->hasPermission('delete media') && $is_owner)
Chris@0 48 ->cachePerPermissions()
Chris@0 49 ->cachePerUser()
Chris@0 50 ->addCacheableDependency($entity);
Chris@0 51
Chris@0 52 default:
Chris@0 53 return AccessResult::neutral()->cachePerPermissions();
Chris@0 54 }
Chris@0 55 }
Chris@0 56
Chris@0 57 /**
Chris@0 58 * {@inheritdoc}
Chris@0 59 */
Chris@0 60 protected function checkCreateAccess(AccountInterface $account, array $context, $entity_bundle = NULL) {
Chris@0 61 return AccessResult::allowedIfHasPermissions($account, ['administer media', 'create media'], 'OR');
Chris@0 62 }
Chris@0 63
Chris@0 64 }