kopia lustrzana https://github.com/wagtail/wagtail
Deprecate UserPagePermissionsProxy
rodzic
91be849e01
commit
1b3d6edbf6
docs/releases
wagtail
models
|
@ -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.
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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())
|
||||
|
|
Ładowanie…
Reference in New Issue