Protect published snapshots and concurrent edits
This commit is contained in:
@@ -109,6 +109,8 @@ def save_page_draft(actor, page: EditorialPage, fields: dict, sections: list[dic
|
||||
base_revision = PageRevision.objects.get(pk=base_revision.pk)
|
||||
if base_revision.page_id != page.pk:
|
||||
raise ValidationError("Base revision belongs to another page.")
|
||||
if base_revision.pk != page.revisions.order_by("-number").values_list("pk", flat=True).first():
|
||||
raise PublishConflict("A newer revision exists. Reload the draft before editing.")
|
||||
if not isinstance(sections, list):
|
||||
raise ValidationError("Sections must be a list.")
|
||||
revision = PageRevision(page=page, number=_next_number(page), created_by=actor, **_fields(fields, PAGE_FIELDS))
|
||||
@@ -132,6 +134,8 @@ def save_site_draft(actor, site: SiteIdentity, fields: dict, *, base_revision=No
|
||||
base_revision = SiteRevision.objects.get(pk=base_revision.pk)
|
||||
if base_revision.site_id != site.pk:
|
||||
raise ValidationError("Base revision belongs to another site.")
|
||||
if base_revision.pk != site.revisions.order_by("-number").values_list("pk", flat=True).first():
|
||||
raise PublishConflict("A newer revision exists. Reload the draft before editing.")
|
||||
revision = SiteRevision(site=site, number=_next_number(site), created_by=actor, **_fields(fields, SITE_FIELDS))
|
||||
revision.full_clean()
|
||||
revision.content_checksum = _site_checksum(revision)
|
||||
|
||||
Reference in New Issue
Block a user