From e953cb36dc13d126f2cb3a55ebeb14f6c51d84e3 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Thu, 1 Dec 2016 16:03:00 +0000 Subject: [PATCH] Limit the explorer breadcrumb to the pages the user has explore permission over Refactor of #3133 --- wagtail/wagtailadmin/navigation.py | 11 ++- .../wagtailadmin/shared/breadcrumb.html | 5 +- .../templatetags/wagtailadmin_tags.py | 23 ++++-- .../wagtailadmin/tests/test_pages_views.py | 77 +++++++++++++++++++ 4 files changed, 105 insertions(+), 11 deletions(-) diff --git a/wagtail/wagtailadmin/navigation.py b/wagtail/wagtailadmin/navigation.py index 81b8acb8a7..40fd1d4e39 100644 --- a/wagtail/wagtailadmin/navigation.py +++ b/wagtail/wagtailadmin/navigation.py @@ -5,17 +5,22 @@ from django.db.models import Q from wagtail.wagtailcore.models import Page -def get_navigation_menu_items(user): +def get_pages_with_direct_explore_permission(user): # Get all pages that the user has direct add/edit/publish/lock permission on if user.is_superuser: # superuser has implicit permission on the root node - pages_with_direct_permission = Page.objects.filter(depth=1) + return Page.objects.filter(depth=1) else: - pages_with_direct_permission = Page.objects.filter( + return Page.objects.filter( group_permissions__group__in=user.groups.all(), group_permissions__permission_type__in=['add', 'edit', 'publish', 'lock'] ) + +def get_navigation_menu_items(user): + # Get all pages that the user has direct add/edit/publish/lock permission on + pages_with_direct_permission = get_pages_with_direct_explore_permission(user) + if not(pages_with_direct_permission): return [] diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/shared/breadcrumb.html b/wagtail/wagtailadmin/templates/wagtailadmin/shared/breadcrumb.html index fbfba591b3..f8918c1bc2 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/shared/breadcrumb.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/shared/breadcrumb.html @@ -2,8 +2,9 @@