mirror of
https://github.com/Hopiu/wagtail.git
synced 2026-03-16 22:10:28 +00:00
Allow global locks to be re-enabled with a setting
This commit is contained in:
parent
f4a1467b7e
commit
ec2feb24c5
3 changed files with 62 additions and 3 deletions
|
|
@ -343,7 +343,7 @@ def edit(request, page_id):
|
|||
form_class = edit_handler.get_form_class()
|
||||
|
||||
user_has_lock = page.locked_by_id == request.user.id
|
||||
page_locked = page.locked and not user_has_lock
|
||||
page_locked = page_perms.page_locked()
|
||||
|
||||
next_url = get_valid_next_url_from_request(request)
|
||||
|
||||
|
|
|
|||
|
|
@ -1845,7 +1845,16 @@ class PagePermissionTester:
|
|||
)
|
||||
|
||||
def page_locked(self):
|
||||
return self.page.locked and self.page.locked_by_id is not self.user.id
|
||||
if not self.page.locked:
|
||||
# Page is not locked
|
||||
return False
|
||||
|
||||
if getattr(settings, 'WAGTAILADMIN_GLOBAL_PAGE_EDIT_LOCK', False):
|
||||
# All locks are global
|
||||
return True
|
||||
else:
|
||||
# Locked only if the current user was not the one who locked the page
|
||||
return self.page.locked_by_id is not self.user.pk
|
||||
|
||||
def can_add_subpage(self):
|
||||
if not self.user.is_active:
|
||||
|
|
|
|||
|
|
@ -2,7 +2,8 @@ import json
|
|||
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.contrib.auth.models import Group
|
||||
from django.test import Client, TestCase
|
||||
from django.test import Client, TestCase, override_settings
|
||||
from django.utils import timezone
|
||||
|
||||
from wagtail.core.models import GroupPagePermission, Page, UserPagePermissionsProxy
|
||||
from wagtail.tests.testapp.models import (
|
||||
|
|
@ -517,6 +518,55 @@ class TestPagePermission(TestCase):
|
|||
|
||||
self.assertFalse(perms.can_lock())
|
||||
|
||||
def test_page_locked_for_unlocked_page(self):
|
||||
user = get_user_model().objects.get(username='eventmoderator')
|
||||
christmas_page = EventPage.objects.get(url_path='/home/events/christmas/')
|
||||
|
||||
perms = UserPagePermissionsProxy(user).for_page(christmas_page)
|
||||
|
||||
self.assertFalse(perms.page_locked())
|
||||
|
||||
def test_page_locked_for_locked_page(self):
|
||||
user = get_user_model().objects.get(username='eventmoderator')
|
||||
christmas_page = EventPage.objects.get(url_path='/home/events/christmas/')
|
||||
|
||||
# Lock the page
|
||||
christmas_page.locked = True
|
||||
christmas_page.locked_by = user
|
||||
christmas_page.locked_at = timezone.now()
|
||||
christmas_page.save()
|
||||
|
||||
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(username='eventeditor')
|
||||
other_perms = UserPagePermissionsProxy(other_user).for_page(christmas_page)
|
||||
self.assertTrue(other_perms.page_locked())
|
||||
|
||||
@override_settings(WAGTAILADMIN_GLOBAL_PAGE_EDIT_LOCK=True)
|
||||
def test_page_locked_for_locked_page_with_global_lock_enabled(self):
|
||||
user = get_user_model().objects.get(username='eventmoderator')
|
||||
christmas_page = EventPage.objects.get(url_path='/home/events/christmas/')
|
||||
|
||||
# Lock the page
|
||||
christmas_page.locked = True
|
||||
christmas_page.locked_by = user
|
||||
christmas_page.locked_at = timezone.now()
|
||||
christmas_page.save()
|
||||
|
||||
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(username='eventeditor')
|
||||
other_perms = UserPagePermissionsProxy(other_user).for_page(christmas_page)
|
||||
self.assertTrue(other_perms.page_locked())
|
||||
|
||||
|
||||
class TestPagePermissionTesterCanCopyTo(TestCase):
|
||||
"""Tests PagePermissionTester.can_copy_to()"""
|
||||
|
|
|
|||
Loading…
Reference in a new issue