Loading core/modules/menu_link_content/src/MenuLinkContentAccessControlHandler.php +3 −0 Original line number Diff line number Diff line Loading @@ -74,6 +74,9 @@ protected function checkAccess(EntityInterface $entity, $operation, AccountInter case 'delete': return AccessResult::allowedIfHasPermission($account, 'administer menu') ->andIf(AccessResult::allowedIf(!$entity->isNew())->addCacheableDependency($entity)); default: return parent::checkAccess($entity, $operation, $account); } } Loading core/modules/menu_link_content/tests/src/Unit/MenuLinkContentEntityAccessTest.php 0 → 100644 +54 −0 Original line number Diff line number Diff line <?php namespace Drupal\Tests\menu_link_content\Unit; use Drupal\Core\Access\AccessManagerInterface; use Drupal\Core\Access\AccessResultInterface; use Drupal\Core\Entity\ContentEntityInterface; use Drupal\Core\Entity\EntityTypeInterface; use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\Core\Language\LanguageInterface; use Drupal\Core\Session\AccountInterface; use Drupal\menu_link_content\MenuLinkContentAccessControlHandler; use Drupal\Tests\UnitTestCase; /** * Tests menu link content entity access. * * @coversDefaultClass \Drupal\menu_link_content\MenuLinkContentAccessControlHandler * @group menu_link_content */ class MenuLinkContentEntityAccessTest extends UnitTestCase { /** * Tests an operation not implemented by the access control handler. * * @covers ::checkAccess */ public function testUnrecognizedOperation() { $entityType = $this->createMock(EntityTypeInterface::class); $accessManager = $this->createMock(AccessManagerInterface::class); $moduleHandler = $this->createMock(ModuleHandlerInterface::class); $moduleHandler->expects($this->any()) ->method('invokeAll') ->willReturn([]); $language = $this->createMock(LanguageInterface::class); $language->expects($this->any()) ->method('getId') ->will($this->returnValue('de')); $entity = $this->createMock(ContentEntityInterface::class); $entity->expects($this->any()) ->method('language') ->willReturn($language); $account = $this->createMock(AccountInterface::class); $accessControl = new MenuLinkContentAccessControlHandler($entityType, $accessManager); $accessControl->setModuleHandler($moduleHandler); $access = $accessControl->access($entity, 'not-an-op', $account, TRUE); $this->assertInstanceOf(AccessResultInterface::class, $access); } } Loading
core/modules/menu_link_content/src/MenuLinkContentAccessControlHandler.php +3 −0 Original line number Diff line number Diff line Loading @@ -74,6 +74,9 @@ protected function checkAccess(EntityInterface $entity, $operation, AccountInter case 'delete': return AccessResult::allowedIfHasPermission($account, 'administer menu') ->andIf(AccessResult::allowedIf(!$entity->isNew())->addCacheableDependency($entity)); default: return parent::checkAccess($entity, $operation, $account); } } Loading
core/modules/menu_link_content/tests/src/Unit/MenuLinkContentEntityAccessTest.php 0 → 100644 +54 −0 Original line number Diff line number Diff line <?php namespace Drupal\Tests\menu_link_content\Unit; use Drupal\Core\Access\AccessManagerInterface; use Drupal\Core\Access\AccessResultInterface; use Drupal\Core\Entity\ContentEntityInterface; use Drupal\Core\Entity\EntityTypeInterface; use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\Core\Language\LanguageInterface; use Drupal\Core\Session\AccountInterface; use Drupal\menu_link_content\MenuLinkContentAccessControlHandler; use Drupal\Tests\UnitTestCase; /** * Tests menu link content entity access. * * @coversDefaultClass \Drupal\menu_link_content\MenuLinkContentAccessControlHandler * @group menu_link_content */ class MenuLinkContentEntityAccessTest extends UnitTestCase { /** * Tests an operation not implemented by the access control handler. * * @covers ::checkAccess */ public function testUnrecognizedOperation() { $entityType = $this->createMock(EntityTypeInterface::class); $accessManager = $this->createMock(AccessManagerInterface::class); $moduleHandler = $this->createMock(ModuleHandlerInterface::class); $moduleHandler->expects($this->any()) ->method('invokeAll') ->willReturn([]); $language = $this->createMock(LanguageInterface::class); $language->expects($this->any()) ->method('getId') ->will($this->returnValue('de')); $entity = $this->createMock(ContentEntityInterface::class); $entity->expects($this->any()) ->method('language') ->willReturn($language); $account = $this->createMock(AccountInterface::class); $accessControl = new MenuLinkContentAccessControlHandler($entityType, $accessManager); $accessControl->setModuleHandler($moduleHandler); $access = $accessControl->access($entity, 'not-an-op', $account, TRUE); $this->assertInstanceOf(AccessResultInterface::class, $access); } }