diff --git a/core/modules/content_moderation/src/Permissions.php b/core/modules/content_moderation/src/Permissions.php index cc60cde..2499d1b 100644 --- a/core/modules/content_moderation/src/Permissions.php +++ b/core/modules/content_moderation/src/Permissions.php @@ -24,11 +24,11 @@ class Permissions implements ContainerInjectionInterface { protected $bundleInfo; /** - * The entity type manager service. + * The entity type definitions. * - * @var \Drupal\Core\Entity\EntityTypeManagerInterface + * @var \Drupal\Core\Entity\EntityTypeInterface[] */ - protected $entityTypeManager; + protected $entityDefinitions; /** * The moderation information service. @@ -42,14 +42,14 @@ class Permissions implements ContainerInjectionInterface { * * @param \Drupal\Core\Entity\EntityTypeBundleInfoInterface $bundle_info * The entity bundle information service. - * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager - * The entity type manager service. + * @param \Drupal\Core\Entity\EntityTypeInterface[] $entity_definitions + * An array of entity type definitions. * @param \Drupal\content_moderation\ModerationInformationInterface $moderation_information * The moderation information service. */ - public function __construct(EntityTypeBundleInfoInterface $bundle_info, EntityTypeManagerInterface $entity_type_manager, ModerationInformationInterface $moderation_information) { + public function __construct(EntityTypeBundleInfoInterface $bundle_info, array $entity_definitions, ModerationInformationInterface $moderation_information) { $this->bundleInfo = $bundle_info; - $this->entityTypeManager = $entity_type_manager; + $this->entityDefinitions = $entity_definitions; $this->moderationInfo = $moderation_information; } @@ -59,7 +59,7 @@ public function __construct(EntityTypeBundleInfoInterface $bundle_info, EntityTy public static function create(ContainerInterface $container) { return new static( $container->get('entity_type.bundle.info'), - $container->get('entity_type.manager'), + $container->get('entity_type.manager')->getDefinitions(), $container->get('content_moderation.moderation_information') ); } @@ -95,16 +95,17 @@ public function transitionPermissions() { */ public function perBundleUnpublishedPermissions() { $permissions = []; - foreach ($this->entityTypeManager->getDefinitions() as $entity_type) { + foreach ($this->entityDefinitions as $entity_type) { if ($this->moderationInfo->canModerateEntitiesOfEntityType($entity_type)) { foreach ($this->bundleInfo->getBundleInfo($entity_type->id()) as $bundle_id => $bundle_information) { - if ($this->moderationInfo->shouldModerateEntitiesOfBundle($entity_type, $bundle_id)) - $permissions["view any unpublished {$entity_type->id()}:{$bundle_id} content"] = [ - 'title' => $this->t('%entity_type: View any unpublished %bundle content', [ - '%entity_type' => $entity_type->getLabel(), - '%bundle' => $bundle_information['label'], - ]), - ]; + if ($this->moderationInfo->shouldModerateEntitiesOfBundle($entity_type, $bundle_id)) { + $permissions["view any unpublished {$entity_type->id()}:{$bundle_id} content"] = [ + 'title' => $this->t('%entity_type: View any unpublished %bundle content', [ + '%entity_type' => $entity_type->getLabel(), + '%bundle' => $bundle_information['label'], + ]), + ]; + } } } } diff --git a/core/modules/content_moderation/tests/src/Kernel/ContentModerationPermissionsTest.php b/core/modules/content_moderation/tests/src/Kernel/ContentModerationPermissionsTest.php index 2143cc1..83c2e15 100644 --- a/core/modules/content_moderation/tests/src/Kernel/ContentModerationPermissionsTest.php +++ b/core/modules/content_moderation/tests/src/Kernel/ContentModerationPermissionsTest.php @@ -22,6 +22,8 @@ class ContentModerationPermissionsTest extends KernelTestBase { 'workflows', 'content_moderation', 'workflow_type_test', + 'entity_test', + 'user', ]; /** @@ -30,6 +32,8 @@ class ContentModerationPermissionsTest extends KernelTestBase { protected function setUp() { parent::setUp(); $this->installEntitySchema('workflow'); + $this->installEntitySchema('entity_test_rev'); + $this->installEntitySchema('user'); } /** @@ -37,14 +41,16 @@ protected function setUp() { * * @dataProvider permissionsTestCases */ - public function testPermissions($workflow, $permissions) { - Workflow::create($workflow)->save(); + public function testPermissions($workflow_definition, $transition_permissions, $unpublished_permissions = []) { + /** @var \Drupal\workflows\WorkflowInterface $workflow */ + $workflow = Workflow::create($workflow_definition)->save(); /** @var \Drupal\content_moderation\Permissions $permission_callback */ $permission_callback = $this->container->get('class_resolver') ->getInstanceFromDefinition(Permissions::class); - $this->assertEquals($permissions, $permission_callback->transitionPermissions()); + $this->assertEquals($transition_permissions, $permission_callback->transitionPermissions()); + $this->assertEquals($unpublished_permissions, $permission_callback->perBundleUnpublishedPermissions()); } /** @@ -84,6 +90,13 @@ public function permissionsTestCases() { 'weight' => 0, ], ], + 'type_settings' => [ + 'entity_types' => [ + 'entity_test_rev' => [ + 'entity_test_rev', + ], + ], + ], ], [ 'use simple_workflow transition publish' => [ @@ -93,6 +106,11 @@ public function permissionsTestCases() { 'title' => 'Use Unpublish transition from Simple Workflow workflow.', ], ], + [ + 'view any unpublished entity_test_rev:entity_test_rev content' => [ + 'title' => 'Test entity - revisions: View any unpublished Entity Test Bundle content', + ], + ], ], 'Non Content Moderation Workflow' => [ [ @@ -118,7 +136,8 @@ public function permissionsTestCases() { ], ], ], - [] + [], + [], ], ]; }