diff --git a/core/modules/media/src/MediaAccessControlHandler.php b/core/modules/media/src/MediaAccessControlHandler.php index f753e7fdb2f36867986f83edb56ebd29e27cc174..434abfe7193aed91935a84f4849d7968e7675bb7 100644 --- a/core/modules/media/src/MediaAccessControlHandler.php +++ b/core/modules/media/src/MediaAccessControlHandler.php @@ -23,9 +23,13 @@ protected function checkAccess(EntityInterface $entity, $operation, AccountInter $is_owner = ($account->id() && $account->id() === $entity->getOwnerId()); switch ($operation) { case 'view': - return AccessResult::allowedIf($account->hasPermission('view media') && $entity->isPublished()) + $access_result = AccessResult::allowedIf($account->hasPermission('view media') && $entity->isPublished()) ->cachePerPermissions() ->addCacheableDependency($entity); + if (!$access_result->isAllowed()) { + $access_result->setReason("The 'view media' permission is required and the media item must be published."); + } + return $access_result; case 'update': if ($account->hasPermission('update any media')) { diff --git a/core/modules/media/tests/src/Functional/MediaAccessTest.php b/core/modules/media/tests/src/Functional/MediaAccessTest.php index 070a980dfc15cf253a38bf2798ecfa906b7144c8..ba02f083bf2e728f03d7d259a7cdf3f97f5cc9e2 100644 --- a/core/modules/media/tests/src/Functional/MediaAccessTest.php +++ b/core/modules/media/tests/src/Functional/MediaAccessTest.php @@ -60,6 +60,8 @@ public function testMediaAccess() { $this->drupalGet('media/' . $media->id()); $this->assertCacheContext('user.permissions'); $assert_session->statusCodeEquals(403); + $access_result = $media->access('view', NULL, TRUE); + $this->assertSame("The 'view media' permission is required and the media item must be published.", $access_result->getReason()); $this->grantPermissions($role, ['view media']); $this->drupalGet('media/' . $media->id()); $this->assertCacheContext('user.permissions');