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): def test_page_edit_num_queries(self):
with self.assertNumQueries(40): with self.assertNumQueries(50):
self.client.get( self.client.get(
reverse("wagtailadmin_pages:edit", args=(self.event_page.id,)) 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 import get_permission_codename
from django.contrib.auth.models import Permission from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.utils.functional import cached_property
from wagtail.models import Page, UserPagePermissionsProxy from wagtail.models import Page, UserPagePermissionsProxy
@ -31,14 +28,6 @@ class PermissionHelper:
content_type__model=self.opts.model_name, 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): def get_perm_codename(self, action):
return get_permission_codename(action, self.opts) 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)) return user.has_perm("%s.%s" % (self.opts.app_label, perm_codename))
@lru_cache(maxsize=128)
def user_has_any_permissions(self, user): def user_has_any_permissions(self, user):
""" """
Return a boolean to indicate whether `user` has any model-wide Return a boolean to indicate whether `user` has any model-wide
permissions permissions
""" """
for perm_codename in self.all_permission_codenames: for perm in self.get_all_model_permissions().values("codename"):
if self.user_has_specific_permission(user, perm_codename): if self.user_has_specific_permission(user, perm["codename"]):
return True return True
return False return False

Wyświetl plik

@ -11,9 +11,7 @@ from django.utils.timezone import make_aware
from openpyxl import load_workbook from openpyxl import load_workbook
from wagtail.admin.admin_url_finder import AdminURLFinder from wagtail.admin.admin_url_finder import AdminURLFinder
from wagtail.admin.models import Admin
from wagtail.admin.panels import FieldPanel, TabbedInterface 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.contrib.modeladmin.helpers.search import DjangoORMSearchHandler
from wagtail.images.models import Image from wagtail.images.models import Image
from wagtail.images.tests.utils import get_test_image_file 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/") response = self.client.post("/admin/modeladmintest/book/delete/2/")
self.assertRedirects(response, "/admin/") 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): class TestHistoryView(TestCase, WagtailTestUtils):
fixtures = ["modeladmintest_test.json"] fixtures = ["modeladmintest_test.json"]

Wyświetl plik

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