diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/account/account.html b/wagtail/wagtailadmin/templates/wagtailadmin/account/account.html
index 21688ce37..f543d66dc 100644
--- a/wagtail/wagtailadmin/templates/wagtailadmin/account/account.html
+++ b/wagtail/wagtailadmin/templates/wagtailadmin/account/account.html
@@ -28,15 +28,17 @@
{% endif %}
-
-
+ {% if show_notification_preferences %}
+
+
-
- {% trans "Choose which email notifications to receive." %}
-
-
+
+ {% trans "Choose which email notifications to receive." %}
+
+
+ {% endif %}
{% endblock %}
diff --git a/wagtail/wagtailadmin/views/account.py b/wagtail/wagtailadmin/views/account.py
index d5ab71bd6..c5cf6ffae 100644
--- a/wagtail/wagtailadmin/views/account.py
+++ b/wagtail/wagtailadmin/views/account.py
@@ -10,12 +10,17 @@ from django.views.decorators.cache import never_cache
from wagtail.wagtailadmin import forms
from wagtail.wagtailusers.forms import NotificationPreferencesForm
+from wagtail.wagtailcore.models import UserPagePermissionsProxy
@permission_required('wagtailadmin.access_admin')
def account(request):
+ user_perms = UserPagePermissionsProxy(request.user)
+ show_notification_preferences = user_perms.can_edit_pages() or user_perms.can_publish_pages()
+
return render(request, 'wagtailadmin/account/account.html', {
'show_change_password': getattr(settings, 'WAGTAIL_PASSWORD_MANAGEMENT_ENABLED', True) and request.user.has_usable_password(),
+ 'show_notification_preferences': show_notification_preferences
})
@@ -56,6 +61,11 @@ def notification_preferences(request):
else:
form = NotificationPreferencesForm(instance=request.user.get_profile())
+ # quick-and-dirty catch-all in case the form has been rendered with no
+ # fields, as the user has no customisable permissions
+ if not form.fields:
+ return redirect('wagtailadmin_account')
+
return render(request, 'wagtailadmin/account/notification_preferences.html', {
'form': form,
})