details:   https://code.tryton.org/tryton/commit/1326133b9082
branch:    default
user:      Cédric Krier <[email protected]>
date:      Tue Sep 15 15:23:42 2026 +0200
description:
        Override contextual groups and administrator when evaluating button 
states

        Closes #15098
diffstat:

 trytond/trytond/model/modelview.py |  20 ++++++++++++--------
 1 files changed, 12 insertions(+), 8 deletions(-)

diffs (30 lines):

diff -r a54c00182549 -r 1326133b9082 trytond/trytond/model/modelview.py
--- a/trytond/trytond/model/modelview.py        Tue Sep 15 15:19:40 2026 +0200
+++ b/trytond/trytond/model/modelview.py        Tue Sep 15 15:23:42 2026 +0200
@@ -772,14 +772,18 @@
 
             if (transaction.user != 0) and check_access:
                 states = cls._buttons.get(func.__name__, {})
-                for state_name in {'invisible', 'readonly'} & states.keys():
-                    state = _pyson_encoder.encode(states[state_name])
-                    for record in records:
-                        if _record_eval_pyson(record, state, encoded=True):
-                            raise AccessButtonError(
-                                gettext('ir.msg_button_state_record',
-                                    button=func.__name__,
-                                    **cls.__names__(record=record)))
+                with transaction.set_context(
+                        groups=User.get_groups(),
+                        administrator=User.is_administrator()):
+                    for state_name in (
+                            {'invisible', 'readonly'} & states.keys()):
+                        state = _pyson_encoder.encode(states[state_name])
+                        for record in records:
+                            if _record_eval_pyson(record, state, encoded=True):
+                                raise AccessButtonError(
+                                    gettext('ir.msg_button_state_record',
+                                        button=func.__name__,
+                                        **cls.__names__(record=record)))
 
             if (transaction.user != 0) and check_access:
                 button_rules = Button.get_rules(

Reply via email to