From 2535fe0e3cdd1906fd27b4b33fe503f04e134194 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Wed, 21 Jun 2023 02:06:20 +0100 Subject: [PATCH] Use PermissionCheckedMixin in place of user_passes_test --- wagtail/admin/views/pages/listing.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/wagtail/admin/views/pages/listing.py b/wagtail/admin/views/pages/listing.py index 7bbd2c8de1..9cf74aa3d4 100644 --- a/wagtail/admin/views/pages/listing.py +++ b/wagtail/admin/views/pages/listing.py @@ -5,27 +5,33 @@ from django.http import Http404 from django.shortcuts import get_object_or_404, redirect from django.template.response import TemplateResponse from django.urls import reverse -from django.utils.decorators import method_decorator from django.views.generic import View from wagtail import hooks -from wagtail.admin.auth import user_has_any_page_permission, user_passes_test from wagtail.admin.ui.side_panels import PageSidePanels +from wagtail.admin.views.generic.permissions import PermissionCheckedMixin from wagtail.permission_policies.pages import Page, PagePermissionPolicy -class IndexView(View): - @method_decorator(user_passes_test(user_has_any_page_permission)) +class IndexView(PermissionCheckedMixin, View): + permission_policy = PagePermissionPolicy() + any_permission_required = { + "add", + "edit", + "publish", + "bulk_delete", + "lock", + "unlock", + } + def get(self, request, parent_page_id=None): if parent_page_id: parent_page = get_object_or_404(Page, id=parent_page_id) else: parent_page = Page.get_first_root_node() - permission_policy = PagePermissionPolicy() - - # This will always succeed because of the @user_passes_test above. - root_page = permission_policy.explorable_root_instance(request.user) + # This will always succeed because of the check performed by PermissionCheckedMixin. + root_page = self.permission_policy.explorable_root_instance(request.user) # If this page isn't a descendant of the user's explorable root page, # then redirect to that explorable root page instead. @@ -38,7 +44,7 @@ class IndexView(View): pages = parent_page.get_children().prefetch_related( "content_type", "sites_rooted_here" - ) & permission_policy.explorable_instances(request.user) + ) & self.permission_policy.explorable_instances(request.user) # Get page ordering ordering = request.GET.get("ordering", "-latest_revision_created_at")