Enforce newsletter campaign add permissions

This commit is contained in:
warrenchen 2026-08-05 17:55:26 +09:00
parent 61a67b8d4a
commit 9b14e392d8

View File

@ -1,11 +1,11 @@
from django import forms from django import forms
from django.contrib.admin.views.decorators import staff_member_required
from django.urls import path from django.urls import path
from django.urls import reverse from django.urls import reverse
from django.utils.translation import gettext as _ from django.utils.translation import gettext as _
from django.shortcuts import redirect from django.shortcuts import redirect
from django.shortcuts import render from django.shortcuts import render
from wagtail import hooks from wagtail import hooks
from wagtail.admin.auth import permission_required, require_admin_access
from wagtail.admin.menu import MenuItem from wagtail.admin.menu import MenuItem
from wagtail.admin.panels import FieldPanel from wagtail.admin.panels import FieldPanel
from wagtail.admin.ui.tables import Column from wagtail.admin.ui.tables import Column
@ -29,6 +29,7 @@ from .models import (
) )
SEND_NEWSLETTER_PERMISSION = "base.send_newslettercampaign" SEND_NEWSLETTER_PERMISSION = "base.send_newslettercampaign"
ADD_NEWSLETTER_PERMISSION = "base.add_newslettercampaign"
def _contact_status_value(submission): def _contact_status_value(submission):
@ -58,7 +59,8 @@ def _newsletter_campaign_add_url() -> str:
return "/admin/snippets/base/newslettercampaign/add/" return "/admin/snippets/base/newslettercampaign/add/"
@staff_member_required @require_admin_access
@permission_required(ADD_NEWSLETTER_PERMISSION)
def newsletter_campaign_type_select_view(request): def newsletter_campaign_type_select_view(request):
return render( return render(
request, request,
@ -72,7 +74,8 @@ def newsletter_campaign_type_select_view(request):
) )
@staff_member_required @require_admin_access
@permission_required(ADD_NEWSLETTER_PERMISSION)
def newsletter_campaign_add_by_type_view(request, campaign_type: str): def newsletter_campaign_add_by_type_view(request, campaign_type: str):
campaign_type = (campaign_type or "").strip() campaign_type = (campaign_type or "").strip()
allowed = {NewsletterCampaign.TYPE_GENERAL, NewsletterCampaign.TYPE_WEEKLY_NEWS} allowed = {NewsletterCampaign.TYPE_GENERAL, NewsletterCampaign.TYPE_WEEKLY_NEWS}