diff --git a/wagtail/admin/templates/wagtailadmin/home/pages_for_moderation.html b/wagtail/admin/templates/wagtailadmin/home/pages_for_moderation.html
index 6ce00820e..8ce936a52 100644
--- a/wagtail/admin/templates/wagtailadmin/home/pages_for_moderation.html
+++ b/wagtail/admin/templates/wagtailadmin/home/pages_for_moderation.html
@@ -18,10 +18,15 @@
{% for revision in page_revisions_for_moderation %}
+ {% page_permissions revision.page as page_perms %}
- {{ revision.page.get_admin_display_title }}
+ {% if page_perms.can_edit %}
+ {{ revision.page.get_admin_display_title }}
+ {% else %}
+ {{ revision.page.get_admin_display_title }}
+ {% endif %}
{% include "wagtailadmin/pages/listing/_privacy_indicator.html" with page=revision.page %}
{% include "wagtailadmin/pages/listing/_locked_indicator.html" with page=revision.page %}
@@ -39,7 +44,9 @@
- {% trans 'Edit' %}
+ {% if page_perms.can_edit %}
+ {% trans 'Edit' %}
+ {% endif %}
{% trans 'Preview' %}
|
diff --git a/wagtail/admin/tests/test_moderation_list.py b/wagtail/admin/tests/test_moderation_list.py
new file mode 100644
index 000000000..e828fb8f8
--- /dev/null
+++ b/wagtail/admin/tests/test_moderation_list.py
@@ -0,0 +1,98 @@
+from django.contrib.auth import get_user_model
+from django.contrib.auth.models import Group, Permission
+from django.test import TestCase
+from django.urls import reverse
+
+from wagtail.core.models import GroupPagePermission, Page
+from wagtail.tests.testapp.models import SimplePage
+from wagtail.tests.utils import WagtailTestUtils
+
+
+class TestModerationList(TestCase, WagtailTestUtils):
+ """Test moderation list rendered by `wagtailadmin_home` view"""
+
+ def setUp(self):
+ # Create a submitter
+ submitter = get_user_model().objects.create_user(
+ username='submitter',
+ email='submitter@email.com',
+ password='password',
+ )
+
+ # Find root page
+ self.root_page = Page.objects.get(id=2)
+
+ # Create a page
+ self.page = SimplePage(
+ title='Wagtail, the powerful CMS for modern websites',
+ slug='wagtail',
+ content='Fast, elegant, open source',
+ )
+
+ self.root_page.add_child(instance=self.page)
+
+ # Submit it for moderation
+ self.page.save_revision(user=submitter, submitted_for_moderation=True)
+
+ # Create a revision
+ self.revision = self.page.get_latest_revision()
+
+ self.edit_page_url = reverse('wagtailadmin_pages:edit', args=(self.revision.page.id, ))
+ self.preview_page_url = reverse('wagtailadmin_pages:preview_for_moderation', args=(self.revision.id, ))
+
+ def login_as_moderator_without_edit(self):
+ # Create moderators group without edit permissions
+ moderators_group = Group.objects.create(name='Moderators without edit')
+
+ admin_permission = Permission.objects.get(
+ content_type__app_label='wagtailadmin',
+ codename='access_admin'
+ )
+
+ moderators_group.permissions.add(admin_permission)
+
+ # Create group permissions
+ GroupPagePermission.objects.create(
+ group=moderators_group,
+ page=self.root_page,
+ permission_type='publish',
+ )
+
+ # Create a moderator without edit permissions
+ moderator = get_user_model().objects.create_user(
+ username='moderator',
+ email='moderator@email.com',
+ password='password'
+ )
+
+ moderator.groups.add(moderators_group)
+
+ self.login(moderator)
+
+ def get(self):
+ return self.client.get(reverse('wagtailadmin_home'))
+
+ def test_edit_page(self):
+ # Login as moderator
+ self.login()
+
+ response = self.get()
+
+ self.assertEqual(response.status_code, 200)
+ self.assertTemplateUsed(response, 'wagtailadmin/home.html')
+
+ # Check response
+ self.assertContains(response, self.edit_page_url, count=2)
+
+ def test_preview_for_moderation(self):
+ # Login as moderator without edit permissions
+ self.login_as_moderator_without_edit()
+
+ response = self.get()
+
+ self.assertEqual(response.status_code, 200)
+ self.assertTemplateUsed(response, 'wagtailadmin/home.html')
+
+ # Check response
+ self.assertContains(response, self.preview_page_url, count=2)
+ self.assertNotContains(response, self.edit_page_url)