Revert "Cache model permission codenames in PermissionHelper"

This reverts commit cb4017c649.
pull/9250/head
Matt Westcott 2022-09-21 16:21:48 +01:00
rodzic 935fead9a3
commit 71e8d449c4
4 zmienionych plików z 6 dodań i 32 usunięć

Wyświetl plik

@ -1698,7 +1698,7 @@ class TestPageEdit(TestCase, WagtailTestUtils):
)
def test_page_edit_num_queries(self):
with self.assertNumQueries(40):
with self.assertNumQueries(50):
self.client.get(
reverse("wagtailadmin_pages:edit", args=(self.event_page.id,))
)

Wyświetl plik

@ -1,9 +1,6 @@
from functools import lru_cache
from django.contrib.auth import get_permission_codename
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
from django.utils.functional import cached_property
from wagtail.models import Page, UserPagePermissionsProxy
@ -31,14 +28,6 @@ class PermissionHelper:
content_type__model=self.opts.model_name,
)
@cached_property
def all_permission_codenames(self):
return list(
self.get_all_model_permissions()
.values_list("codename", flat=True)
.distinct()
)
def get_perm_codename(self, action):
return get_permission_codename(action, self.opts)
@ -50,14 +39,13 @@ class PermissionHelper:
return user.has_perm("%s.%s" % (self.opts.app_label, perm_codename))
@lru_cache(maxsize=128)
def user_has_any_permissions(self, user):
"""
Return a boolean to indicate whether `user` has any model-wide
permissions
"""
for perm_codename in self.all_permission_codenames:
if self.user_has_specific_permission(user, perm_codename):
for perm in self.get_all_model_permissions().values("codename"):
if self.user_has_specific_permission(user, perm["codename"]):
return True
return False

Wyświetl plik

@ -11,9 +11,7 @@ from django.utils.timezone import make_aware
from openpyxl import load_workbook
from wagtail.admin.admin_url_finder import AdminURLFinder
from wagtail.admin.models import Admin
from wagtail.admin.panels import FieldPanel, TabbedInterface
from wagtail.contrib.modeladmin.helpers.permission import PermissionHelper
from wagtail.contrib.modeladmin.helpers.search import DjangoORMSearchHandler
from wagtail.images.models import Image
from wagtail.images.tests.utils import get_test_image_file
@ -964,18 +962,6 @@ class TestEditorAccess(TestCase, WagtailTestUtils):
response = self.client.post("/admin/modeladmintest/book/delete/2/")
self.assertRedirects(response, "/admin/")
def test_permission_helper(self):
permission_helper = PermissionHelper(Admin)
# Populate user permissions cache
with self.assertNumQueries(2):
self.assertTrue(self.user.has_perm("wagtailadmin.access_admin"))
with self.assertNumQueries(1):
# Only one query - to retrieve the model's codenames - should be performed.
self.assertTrue(permission_helper.user_has_any_permissions(self.user))
self.assertTrue(permission_helper.user_can_list(self.user))
class TestHistoryView(TestCase, WagtailTestUtils):
fixtures = ["modeladmintest_test.json"]

Wyświetl plik

@ -323,7 +323,7 @@ class TestImageIndexView(TestCase, WagtailTestUtils):
def test_num_queries(self):
# Initial number of queries.
with self.assertNumQueries(13):
with self.assertNumQueries(23):
self.get()
# Add 5 images.
@ -333,11 +333,11 @@ class TestImageIndexView(TestCase, WagtailTestUtils):
file=get_test_image_file(size=(1, 1)),
)
with self.assertNumQueries(35):
with self.assertNumQueries(45):
# The renditions needed don't exist yet. We have 20 = 5 * 4 + 2 additional queries.
self.get()
with self.assertNumQueries(15):
with self.assertNumQueries(25):
# No extra additional queries since renditions exist and are saved in
# the prefetched objects cache.
self.get()