Loading core/modules/media_library/src/MediaLibraryUiBuilder.php +5 −1 Original line number Diff line number Diff line Loading @@ -285,7 +285,11 @@ protected function buildMediaTypeMenu(MediaLibraryState $state) { protected function buildMediaTypeAddForm(MediaLibraryState $state) { $selected_type_id = $state->getSelectedTypeId(); if (!$this->entityTypeManager->getAccessControlHandler('media')->createAccess($selected_type_id)) { $access_handler = $this->entityTypeManager->getAccessControlHandler('media'); $context = [ 'media_library_state' => $state, ]; if (!$access_handler->createAccess($selected_type_id, NULL, $context)) { return []; } Loading core/modules/media_library/tests/modules/media_library_test/media_library_test.module +12 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,18 @@ use Drupal\Core\Session\AccountInterface; use Drupal\media_library_test\Form\TestNodeFormOverride; /** * Implements hook_ENTITY_TYPE_create_access(). */ function media_library_test_media_create_access(AccountInterface $account, array $context, $entity_bundle) { if (isset($context['media_library_state'])) { /** @var \Drupal\media_library\MediaLibraryState $state */ $state = $context['media_library_state']; return AccessResult::forbiddenIf($state->getSelectedTypeId() === 'deny_access'); } return AccessResult::neutral(); } /** * Implements hook_entity_field_access(). */ Loading core/modules/media_library/tests/src/Kernel/MediaLibraryAccessTest.php +30 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ use Drupal\image\Entity\ImageStyle; use Drupal\KernelTests\KernelTestBase; use Drupal\media_library\MediaLibraryState; use Drupal\Tests\media\Traits\MediaTypeCreationTrait; use Drupal\Tests\user\Traits\UserCreationTrait; use Drupal\views\Views; Loading @@ -22,6 +23,7 @@ class MediaLibraryAccessTest extends KernelTestBase { use UserCreationTrait; use MediaTypeCreationTrait; /** * {@inheritdoc} Loading Loading @@ -368,6 +370,34 @@ public function testViewAccess() { $this->assertAccess($access_result, FALSE, 'The media library view does not exist.'); } /** * Tests that the media library respects arbitrary access to the add form. */ public function testAddFormAccess(): void { // Access is denied if the media library is trying to create media whose // type name is 'deny_access'. Also create a second media type that we *can* // add, so we can be certain that the add form is otherwise visible. // @see media_library_test_media_create_access() $media_types = [ $this->createMediaType('image', ['id' => 'deny_access'])->id(), $this->createMediaType('image')->id(), ]; $account = $this->createUser(['create media']); $this->setCurrentUser($account); /** @var \Drupal\media_library\MediaLibraryUiBuilder $ui_builder */ $ui_builder = $this->container->get('media_library.ui_builder'); $state = MediaLibraryState::create('test', $media_types, $media_types[0], 1); $build = $ui_builder->buildUi($state); $this->assertEmpty($build['content']['form']); $state = MediaLibraryState::create('test', $media_types, $media_types[1], 1); $build = $ui_builder->buildUi($state); $this->assertNotEmpty($build['content']['form']); } /** * Asserts various aspects of an access result. * Loading Loading
core/modules/media_library/src/MediaLibraryUiBuilder.php +5 −1 Original line number Diff line number Diff line Loading @@ -285,7 +285,11 @@ protected function buildMediaTypeMenu(MediaLibraryState $state) { protected function buildMediaTypeAddForm(MediaLibraryState $state) { $selected_type_id = $state->getSelectedTypeId(); if (!$this->entityTypeManager->getAccessControlHandler('media')->createAccess($selected_type_id)) { $access_handler = $this->entityTypeManager->getAccessControlHandler('media'); $context = [ 'media_library_state' => $state, ]; if (!$access_handler->createAccess($selected_type_id, NULL, $context)) { return []; } Loading
core/modules/media_library/tests/modules/media_library_test/media_library_test.module +12 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,18 @@ use Drupal\Core\Session\AccountInterface; use Drupal\media_library_test\Form\TestNodeFormOverride; /** * Implements hook_ENTITY_TYPE_create_access(). */ function media_library_test_media_create_access(AccountInterface $account, array $context, $entity_bundle) { if (isset($context['media_library_state'])) { /** @var \Drupal\media_library\MediaLibraryState $state */ $state = $context['media_library_state']; return AccessResult::forbiddenIf($state->getSelectedTypeId() === 'deny_access'); } return AccessResult::neutral(); } /** * Implements hook_entity_field_access(). */ Loading
core/modules/media_library/tests/src/Kernel/MediaLibraryAccessTest.php +30 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ use Drupal\image\Entity\ImageStyle; use Drupal\KernelTests\KernelTestBase; use Drupal\media_library\MediaLibraryState; use Drupal\Tests\media\Traits\MediaTypeCreationTrait; use Drupal\Tests\user\Traits\UserCreationTrait; use Drupal\views\Views; Loading @@ -22,6 +23,7 @@ class MediaLibraryAccessTest extends KernelTestBase { use UserCreationTrait; use MediaTypeCreationTrait; /** * {@inheritdoc} Loading Loading @@ -368,6 +370,34 @@ public function testViewAccess() { $this->assertAccess($access_result, FALSE, 'The media library view does not exist.'); } /** * Tests that the media library respects arbitrary access to the add form. */ public function testAddFormAccess(): void { // Access is denied if the media library is trying to create media whose // type name is 'deny_access'. Also create a second media type that we *can* // add, so we can be certain that the add form is otherwise visible. // @see media_library_test_media_create_access() $media_types = [ $this->createMediaType('image', ['id' => 'deny_access'])->id(), $this->createMediaType('image')->id(), ]; $account = $this->createUser(['create media']); $this->setCurrentUser($account); /** @var \Drupal\media_library\MediaLibraryUiBuilder $ui_builder */ $ui_builder = $this->container->get('media_library.ui_builder'); $state = MediaLibraryState::create('test', $media_types, $media_types[0], 1); $build = $ui_builder->buildUi($state); $this->assertEmpty($build['content']['form']); $state = MediaLibraryState::create('test', $media_types, $media_types[1], 1); $build = $ui_builder->buildUi($state); $this->assertNotEmpty($build['content']['form']); } /** * Asserts various aspects of an access result. * Loading