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() {
],
],
],
- []
+ [],
+ [],
],
];
}