details:   https://code.tryton.org/tryton/commit/e6d7121c620c
branch:    default
user:      Cédric Krier <[email protected]>
date:      Mon Aug 31 13:43:41 2026 +0200
description:
        Do not enforce access rights when performing action on delete

        Closes #15050
diffstat:

 trytond/trytond/model/modelsql.py |  35 ++++++++++++++++++-----------------
 1 files changed, 18 insertions(+), 17 deletions(-)

diffs (54 lines):

diff -r 5687ccb4301e -r e6d7121c620c trytond/trytond/model/modelsql.py
--- a/trytond/trytond/model/modelsql.py Mon Aug 31 13:39:42 2026 +0200
+++ b/trytond/trytond/model/modelsql.py Mon Aug 31 13:43:41 2026 +0200
@@ -1676,7 +1676,7 @@
                         where=foreign_red_sql))
                 related_records = Model.browse([x[0] for x in cursor])
             else:
-                with without_check_access(), inactive_records():
+                with inactive_records():
                     related_records = Model.search(
                         [(field_name, 'in', ids)],
                         order=[])
@@ -1684,24 +1684,25 @@
                 related_records = list(set(related_records) - set(records))
             return related_records
 
-        for Model, field_name in foreign_keys_toupdate:
-            related_records = get_related_records(Model, field_name, ids)
-            if related_records:
-                Model.write(related_records, {
-                        field_name: None,
-                        })
+        with without_check_access():
+            for Model, field_name in foreign_keys_toupdate:
+                related_records = get_related_records(Model, field_name, ids)
+                if related_records:
+                    Model.write(related_records, {
+                            field_name: None,
+                            })
 
-        for Model, field_name in foreign_keys_todelete:
-            related_records = get_related_records(Model, field_name, ids)
-            if related_records:
-                Model.delete(related_records)
+            for Model, field_name in foreign_keys_todelete:
+                related_records = get_related_records(Model, field_name, ids)
+                if related_records:
+                    Model.delete(related_records)
 
-        for Model, field_name in foreign_keys_tocheck:
-            if get_related_records(Model, field_name, ids):
-                error_args = Model.__names__(field_name)
-                raise ForeignKeyError(
-                    gettext('ir.msg_foreign_model_exist',
-                        **error_args))
+            for Model, field_name in foreign_keys_tocheck:
+                if get_related_records(Model, field_name, ids):
+                    error_args = Model.__names__(field_name)
+                    raise ForeignKeyError(
+                        gettext('ir.msg_foreign_model_exist',
+                            **error_args))
 
         try:
             cursor.execute(*table.delete(

Reply via email to