details:   https://code.tryton.org/tryton/commit/fc3a45f1aa31
branch:    7.0
user:      Cédric Krier <[email protected]>
date:      Tue Jun 30 23:09:36 2026 +0200
description:
        Enforce access rights on the email template record on marketing email

        Closes #14907
        (grafted from 856dea6dca76bd9cd7fa03a3dbe51f160b912e69)
diffstat:

 modules/marketing_email/CHANGELOG    |   1 +
 modules/marketing_email/marketing.py |  12 ++++++++++++
 2 files changed, 13 insertions(+), 0 deletions(-)

diffs (44 lines):

diff -r 4221d74d44d7 -r fc3a45f1aa31 modules/marketing_email/CHANGELOG
--- a/modules/marketing_email/CHANGELOG Tue Jun 30 09:48:33 2026 +0200
+++ b/modules/marketing_email/CHANGELOG Tue Jun 30 23:09:36 2026 +0200
@@ -1,3 +1,4 @@
+* Enforce access rights on the email template record (issue14907)
 
 Version 7.0.2 - 2026-03-02
 --------------------------
diff -r 4221d74d44d7 -r fc3a45f1aa31 modules/marketing_email/marketing.py
--- a/modules/marketing_email/marketing.py      Tue Jun 30 09:48:33 2026 +0200
+++ b/modules/marketing_email/marketing.py      Tue Jun 30 23:09:36 2026 +0200
@@ -38,6 +38,11 @@
 from trytond.url import http_host
 from trytond.wizard import Button, StateTransition, StateView, Wizard
 
+try:
+    from trytond.model import ModelAccessProxy
+except ImportError:
+    ModelAccessProxy = None
+
 from .exceptions import EMailValidationError, TemplateError
 
 if not config.get(
@@ -470,6 +475,7 @@
     def process(cls, messages=None, emails=None, smtpd_datamanager=None):
         pool = Pool()
         WebShortener = pool.get('web.shortened_url')
+        ModelData = pool.get('ir.model.data')
         spy_pixel = config.getboolean(
             'marketing', 'email_spy_pixel', default=False)
 
@@ -513,6 +519,12 @@
         for message in messages:
             template = MarkupTemplate(message.content)
             for email in (emails or message.list_.emails):
+                if ModelAccessProxy:
+                    email = ModelAccessProxy(
+                        email, {
+                            '_groups': [
+                                ModelData.get_id('marketing.group_marketing')],
+                            })
                 content = (template
                     .generate(email=email)
                     .filter(convert_href(message))

Reply via email to