Deprecate UserPagePermissionsProxy

pull/10562/head
Sage Abdullah 2023-06-14 12:18:56 +01:00
rodzic 91be849e01
commit 1b3d6edbf6
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: EB1A33CC51CC0217
3 zmienionych plików z 236 dodań i 25 usunięć
docs/releases

Wyświetl plik

@ -68,3 +68,44 @@ FieldPanels can now be marked as read-only with the `read_only=True` keyword arg
### `insert_editor_css` hook is deprecated
The `insert_editor_css` hook has been deprecated. The `insert_global_admin_css` hook has the same functionality, and all uses of `insert_editor_css` should be changed to `insert_global_admin_css`.
### `UserPagePermissionsProxy` is deprecated
The undocumented `wagtail.models.UserPagePermissionsProxy` class is deprecated.
If you use the `.for_page(page)` method of the class to get a `PagePermissionTester` instance, you can replace it with `page.permissions_for_user(user)`.
If you use the other methods, they can be replaced via the `wagtail.permission_policies.pages.PagePermissionPolicy` class. The following is a list of the `PagePermissionPolicy` equivalent of each method:
```python
from wagtail.models import UserPagePermissionsProxy
from wagtail.permission_policies.pages import PagePermissionPolicy
# proxy = UserPagePermissionsProxy(user)
permission_policy = PagePermissionPolicy()
# proxy.revisions_for_moderation()
permission_policy.revisions_for_moderation(user)
# proxy.explorable_pages()
permission_policy.explorable_instances(user)
# proxy.editable_pages()
permission_policy.instances_user_has_permission_for(user, "edit")
# proxy.can_edit_pages()
permission_policy.instances_user_has_permission_for(user, "edit").exists()
# proxy.publishable_pages()
permission_policy.instances_user_has_permission_for(user, "publish")
# proxy.can_publish_pages()
permission_policy.instances_user_has_permission_for(user, "publish").exists()
# proxy.can_remove_locks()
permission_policy.user_has_any_permission(user, "unlock")
```
The `UserPagePermissionsProxy` object that was previously available in page's `ActionMenuItem` context as `user_page_permissions` has been removed. In cases where the page object is available (e.g. the page edit view), the `PagePermissionTester` object stored as the `user_page_permissions_tester` context variable is still available.
If you use `UserPagePermissionsProxy` in your code, e.g. the `user_page_permissions` context variable in an `ActionMenuItem` subclass as part of your `register_page_action_menu_item` hooks, make sure to replace it either with the `PagePermissionTester` or the `PagePermissionPolicy` equivalent.

Wyświetl plik

@ -2931,6 +2931,13 @@ class UserPagePermissionsProxy:
def __init__(self, user):
from wagtail.permission_policies.pages import PagePermissionPolicy
warnings.warn(
"UserPagePermissionsProxy is deprecated. "
"Use wagtail.permission_policies.pages.PagePermissionPolicy instead.",
category=RemovedInWagtail60Warning,
stacklevel=2,
)
self.user = user
self.permission_policy = PagePermissionPolicy()
self.permissions = self.permission_policy.get_cached_permissions_for_user(user)

Wyświetl plik

@ -20,6 +20,7 @@ from wagtail.test.testapp.models import (
EventPage,
SingletonPageViaMaxCount,
)
from wagtail.utils.deprecation import RemovedInWagtail60Warning
class TestPagePermission(TestCase):
@ -418,7 +419,14 @@ class TestPagePermission(TestCase):
url_path="/home/events/someone-elses-event/"
)
user_perms = UserPagePermissionsProxy(event_editor)
with self.assertWarnsMessage(
RemovedInWagtail60Warning,
"UserPagePermissionsProxy is deprecated. "
"Use wagtail.permission_policies.pages.PagePermissionPolicy instead.",
):
# Replace with PagePermissionPolicy().instances_user_has_permission_for()
user_perms = UserPagePermissionsProxy(event_editor)
editable_pages = user_perms.editable_pages()
can_edit_pages = user_perms.can_edit_pages()
publishable_pages = user_perms.publishable_pages()
@ -453,7 +461,14 @@ class TestPagePermission(TestCase):
)
about_us_page = Page.objects.get(url_path="/home/about-us/")
user_perms = UserPagePermissionsProxy(event_editor)
with self.assertWarnsMessage(
RemovedInWagtail60Warning,
"UserPagePermissionsProxy is deprecated. "
"Use wagtail.permission_policies.pages.PagePermissionPolicy instead.",
):
# Replace with PagePermissionPolicy().explorable_instances()
user_perms = UserPagePermissionsProxy(event_editor)
explorable_pages = user_perms.explorable_pages()
# Verify all pages below /home/events/ are explorable
@ -489,7 +504,14 @@ class TestPagePermission(TestCase):
corporate_editor = get_user_model().objects.get(
email="corporateeditor@example.com"
)
user_perms = UserPagePermissionsProxy(corporate_editor)
with self.assertWarnsMessage(
RemovedInWagtail60Warning,
"UserPagePermissionsProxy is deprecated. "
"Use wagtail.permission_policies.pages.PagePermissionPolicy instead.",
):
# Replace with PagePermissionPolicy().explorable_instances()
user_perms = UserPagePermissionsProxy(corporate_editor)
about_us_page = Page.objects.get(url_path="/home/about-us/")
businessy_events = Page.objects.get(url_path="/home/events/businessy-events/")
@ -514,7 +536,14 @@ class TestPagePermission(TestCase):
url_path="/home/events/someone-elses-event/"
)
user_perms = UserPagePermissionsProxy(event_moderator)
with self.assertWarnsMessage(
RemovedInWagtail60Warning,
"UserPagePermissionsProxy is deprecated. "
"Use wagtail.permission_policies.pages.PagePermissionPolicy instead.",
):
# Replace with PagePermissionPolicy().instances_user_has_permission_for()
user_perms = UserPagePermissionsProxy(event_moderator)
editable_pages = user_perms.editable_pages()
can_edit_pages = user_perms.can_edit_pages()
publishable_pages = user_perms.publishable_pages()
@ -547,7 +576,14 @@ class TestPagePermission(TestCase):
url_path="/home/events/someone-elses-event/"
)
user_perms = UserPagePermissionsProxy(user)
with self.assertWarnsMessage(
RemovedInWagtail60Warning,
"UserPagePermissionsProxy is deprecated. "
"Use wagtail.permission_policies.pages.PagePermissionPolicy instead.",
):
# Replace with PagePermissionPolicy().instances_user_has_permission_for()
user_perms = UserPagePermissionsProxy(user)
editable_pages = user_perms.editable_pages()
can_edit_pages = user_perms.can_edit_pages()
publishable_pages = user_perms.publishable_pages()
@ -582,7 +618,14 @@ class TestPagePermission(TestCase):
url_path="/home/events/someone-elses-event/"
)
user_perms = UserPagePermissionsProxy(user)
with self.assertWarnsMessage(
RemovedInWagtail60Warning,
"UserPagePermissionsProxy is deprecated. "
"Use wagtail.permission_policies.pages.PagePermissionPolicy instead.",
):
# Replace with PagePermissionPolicy().instances_user_has_permission_for()
user_perms = UserPagePermissionsProxy(user)
editable_pages = user_perms.editable_pages()
can_edit_pages = user_perms.can_edit_pages()
publishable_pages = user_perms.publishable_pages()
@ -615,7 +658,14 @@ class TestPagePermission(TestCase):
url_path="/home/events/someone-elses-event/"
)
user_perms = UserPagePermissionsProxy(user)
with self.assertWarnsMessage(
RemovedInWagtail60Warning,
"UserPagePermissionsProxy is deprecated. "
"Use wagtail.permission_policies.pages.PagePermissionPolicy instead.",
):
# Replace with PagePermissionPolicy().instances_user_has_permission_for()
user_perms = UserPagePermissionsProxy(user)
editable_pages = user_perms.editable_pages()
can_edit_pages = user_perms.can_edit_pages()
publishable_pages = user_perms.publishable_pages()
@ -644,8 +694,16 @@ class TestPagePermission(TestCase):
christmas_page = EventPage.objects.get(url_path="/home/events/christmas/")
locked_page = Page.objects.get(url_path="/home/my-locked-page/")
perms = UserPagePermissionsProxy(user).for_page(christmas_page)
locked_perms = UserPagePermissionsProxy(user).for_page(locked_page)
with self.assertWarnsMessage(
RemovedInWagtail60Warning,
"UserPagePermissionsProxy is deprecated. "
"Use wagtail.permission_policies.pages.PagePermissionPolicy instead.",
):
# Replace with page.permissions_for_user(user)
user_perms = UserPagePermissionsProxy(user)
perms = user_perms.for_page(christmas_page)
locked_perms = user_perms.for_page(locked_page)
self.assertTrue(perms.can_lock())
self.assertFalse(
@ -657,7 +715,13 @@ class TestPagePermission(TestCase):
user = get_user_model().objects.get(email="eventmoderator@example.com")
christmas_page = EventPage.objects.get(url_path="/home/events/christmas/")
perms = UserPagePermissionsProxy(user).for_page(christmas_page)
with self.assertWarnsMessage(
RemovedInWagtail60Warning,
"UserPagePermissionsProxy is deprecated. "
"Use wagtail.permission_policies.pages.PagePermissionPolicy instead.",
):
# Replace with page.permissions_for_user(user)
perms = UserPagePermissionsProxy(user).for_page(christmas_page)
self.assertTrue(perms.can_lock())
self.assertTrue(perms.can_unlock())
@ -670,7 +734,13 @@ class TestPagePermission(TestCase):
group__name="Event moderators", permission_type="unlock"
).delete()
perms = UserPagePermissionsProxy(user).for_page(christmas_page)
with self.assertWarnsMessage(
RemovedInWagtail60Warning,
"UserPagePermissionsProxy is deprecated. "
"Use wagtail.permission_policies.pages.PagePermissionPolicy instead.",
):
# Replace with page.permissions_for_user(user)
perms = UserPagePermissionsProxy(user).for_page(christmas_page)
self.assertTrue(perms.can_lock())
self.assertFalse(perms.can_unlock())
@ -689,7 +759,13 @@ class TestPagePermission(TestCase):
group__name="Event moderators", permission_type="unlock"
).delete()
perms = UserPagePermissionsProxy(user).for_page(christmas_page)
with self.assertWarnsMessage(
RemovedInWagtail60Warning,
"UserPagePermissionsProxy is deprecated. "
"Use wagtail.permission_policies.pages.PagePermissionPolicy instead.",
):
# Replace with page.permissions_for_user(user)
perms = UserPagePermissionsProxy(user).for_page(christmas_page)
# Unlike in the previous test, the user can unlock this page as it was them who locked
self.assertTrue(perms.can_lock())
@ -699,7 +775,13 @@ class TestPagePermission(TestCase):
user = get_user_model().objects.get(email="eventeditor@example.com")
christmas_page = EventPage.objects.get(url_path="/home/events/christmas/")
perms = UserPagePermissionsProxy(user).for_page(christmas_page)
with self.assertWarnsMessage(
RemovedInWagtail60Warning,
"UserPagePermissionsProxy is deprecated. "
"Use wagtail.permission_policies.pages.PagePermissionPolicy instead.",
):
# Replace with page.permissions_for_user(user)
perms = UserPagePermissionsProxy(user).for_page(christmas_page)
self.assertFalse(perms.can_lock())
self.assertFalse(perms.can_unlock())
@ -708,7 +790,13 @@ class TestPagePermission(TestCase):
user = get_user_model().objects.get(email="admin_only_user@example.com")
christmas_page = EventPage.objects.get(url_path="/home/events/christmas/")
perms = UserPagePermissionsProxy(user).for_page(christmas_page)
with self.assertWarnsMessage(
RemovedInWagtail60Warning,
"UserPagePermissionsProxy is deprecated. "
"Use wagtail.permission_policies.pages.PagePermissionPolicy instead.",
):
# Replace with page.permissions_for_user(user)
perms = UserPagePermissionsProxy(user).for_page(christmas_page)
self.assertFalse(perms.can_lock())
self.assertFalse(perms.can_unlock())
@ -723,7 +811,13 @@ class TestPagePermission(TestCase):
permission_type="lock",
)
perms = UserPagePermissionsProxy(user).for_page(christmas_page)
with self.assertWarnsMessage(
RemovedInWagtail60Warning,
"UserPagePermissionsProxy is deprecated. "
"Use wagtail.permission_policies.pages.PagePermissionPolicy instead.",
):
# Replace with page.permissions_for_user(user)
perms = UserPagePermissionsProxy(user).for_page(christmas_page)
self.assertTrue(perms.can_lock())
@ -734,7 +828,13 @@ class TestPagePermission(TestCase):
user = get_user_model().objects.get(email="eventmoderator@example.com")
christmas_page = EventPage.objects.get(url_path="/home/events/christmas/")
perms = UserPagePermissionsProxy(user).for_page(christmas_page)
with self.assertWarnsMessage(
RemovedInWagtail60Warning,
"UserPagePermissionsProxy is deprecated. "
"Use wagtail.permission_policies.pages.PagePermissionPolicy instead.",
):
# Replace with page.permissions_for_user(user)
perms = UserPagePermissionsProxy(user).for_page(christmas_page)
self.assertFalse(perms.page_locked())
@ -748,14 +848,27 @@ class TestPagePermission(TestCase):
christmas_page.locked_at = timezone.now()
christmas_page.save()
perms = UserPagePermissionsProxy(user).for_page(christmas_page)
with self.assertWarnsMessage(
RemovedInWagtail60Warning,
"UserPagePermissionsProxy is deprecated. "
"Use wagtail.permission_policies.pages.PagePermissionPolicy instead.",
):
# Replace with page.permissions_for_user(user)
perms = UserPagePermissionsProxy(user).for_page(christmas_page)
# The user who locked the page shouldn't see the page as locked
self.assertFalse(perms.page_locked())
# Other users should see the page as locked
other_user = get_user_model().objects.get(email="eventeditor@example.com")
other_perms = UserPagePermissionsProxy(other_user).for_page(christmas_page)
with self.assertWarnsMessage(
RemovedInWagtail60Warning,
"UserPagePermissionsProxy is deprecated. "
"Use wagtail.permission_policies.pages.PagePermissionPolicy instead.",
):
# Replace with page.permissions_for_user(other_user)
other_perms = UserPagePermissionsProxy(other_user).for_page(christmas_page)
self.assertTrue(other_perms.page_locked())
@override_settings(WAGTAILADMIN_GLOBAL_EDIT_LOCK=True)
@ -769,14 +882,28 @@ class TestPagePermission(TestCase):
christmas_page.locked_at = timezone.now()
christmas_page.save()
perms = UserPagePermissionsProxy(user).for_page(christmas_page)
with self.assertWarnsMessage(
RemovedInWagtail60Warning,
"UserPagePermissionsProxy is deprecated. "
"Use wagtail.permission_policies.pages.PagePermissionPolicy instead.",
):
# Replace with page.permissions_for_user(user)
perms = UserPagePermissionsProxy(user).for_page(christmas_page)
# The user who locked the page should now also see the page as locked
self.assertTrue(perms.page_locked())
# Other users should see the page as locked, like before
other_user = get_user_model().objects.get(email="eventeditor@example.com")
other_perms = UserPagePermissionsProxy(other_user).for_page(christmas_page)
with self.assertWarnsMessage(
RemovedInWagtail60Warning,
"UserPagePermissionsProxy is deprecated. "
"Use wagtail.permission_policies.pages.PagePermissionPolicy instead.",
):
# Replace with page.permissions_for_user(other_user)
other_perms = UserPagePermissionsProxy(other_user).for_page(christmas_page)
self.assertTrue(other_perms.page_locked())
def test_page_locked_in_workflow(self):
@ -788,19 +915,41 @@ class TestPagePermission(TestCase):
christmas_page.save_revision()
workflow.start(christmas_page, editor)
moderator_perms = UserPagePermissionsProxy(moderator).for_page(christmas_page)
with self.assertWarnsMessage(
RemovedInWagtail60Warning,
"UserPagePermissionsProxy is deprecated. "
"Use wagtail.permission_policies.pages.PagePermissionPolicy instead.",
):
# Replace with page.permissions_for_user(moderator)
moderator_perms = UserPagePermissionsProxy(moderator).for_page(
christmas_page
)
# the moderator is in the group assigned to moderate the task, so the page should
# not be locked for them
self.assertFalse(moderator_perms.page_locked())
superuser_perms = UserPagePermissionsProxy(superuser).for_page(christmas_page)
with self.assertWarnsMessage(
RemovedInWagtail60Warning,
"UserPagePermissionsProxy is deprecated. "
"Use wagtail.permission_policies.pages.PagePermissionPolicy instead.",
):
# Replace with page.permissions_for_user(superuser)
superuser_perms = UserPagePermissionsProxy(superuser).for_page(
christmas_page
)
# superusers can moderate any GroupApprovalTask, so the page should not be locked
# for them
self.assertFalse(superuser_perms.page_locked())
editor_perms = UserPagePermissionsProxy(editor).for_page(christmas_page)
with self.assertWarnsMessage(
RemovedInWagtail60Warning,
"UserPagePermissionsProxy is deprecated. "
"Use wagtail.permission_policies.pages.PagePermissionPolicy instead.",
):
# Replace with page.permissions_for_user(editor)
editor_perms = UserPagePermissionsProxy(editor).for_page(christmas_page)
# the editor is not in the group assigned to moderate the task, so the page should
# be locked for them
@ -814,14 +963,28 @@ class TestPagePermission(TestCase):
christmas_page.save_revision()
workflow.start(christmas_page, editor)
moderator_perms = UserPagePermissionsProxy(moderator).for_page(christmas_page)
with self.assertWarnsMessage(
RemovedInWagtail60Warning,
"UserPagePermissionsProxy is deprecated. "
"Use wagtail.permission_policies.pages.PagePermissionPolicy instead.",
):
# Replace with page.permissions_for_user(moderator)
moderator_perms = UserPagePermissionsProxy(moderator).for_page(
christmas_page
)
# the moderator is in the group assigned to moderate the task, so they can lock the page, but can't unlock it
# unless they're the locker
self.assertTrue(moderator_perms.can_lock())
self.assertFalse(moderator_perms.can_unlock())
editor_perms = UserPagePermissionsProxy(editor).for_page(christmas_page)
with self.assertWarnsMessage(
RemovedInWagtail60Warning,
"UserPagePermissionsProxy is deprecated. "
"Use wagtail.permission_policies.pages.PagePermissionPolicy instead.",
):
# Replace with page.permissions_for_user(editor)
editor_perms = UserPagePermissionsProxy(editor).for_page(christmas_page)
# the editor is not in the group assigned to moderate the task, so they can't lock or unlock the page
self.assertFalse(editor_perms.can_lock())