details: https://code.tryton.org/tryton/commit/1338e4f05ab6
branch: default
user: Cédric Krier <[email protected]>
date: Thu Oct 01 12:29:05 2026 +0200
description:
Do not make buttons read-only based on groups for administrator users
Since 6ebedcf8826e administrators no longer have groups, disabling
buttons
based on groups should be skipped for administrators.
Closes #15134
diffstat:
trytond/trytond/model/modelview.py | 19 +++++++++++++------
1 files changed, 13 insertions(+), 6 deletions(-)
diffs (49 lines):
diff -r 18bd1a03d745 -r 1338e4f05ab6 trytond/trytond/model/modelview.py
--- a/trytond/trytond/model/modelview.py Wed Sep 30 09:34:18 2026 +0200
+++ b/trytond/trytond/model/modelview.py Thu Oct 01 12:29:05 2026 +0200
@@ -271,7 +271,11 @@
pool = Pool()
User = pool.get('res.user')
- key = (User.get_groups(), cls.__name__, view_id, view_type, level)
+ is_administrator = User.is_administrator()
+ groups = User.get_groups()
+
+ key = (
+ is_administrator, groups, cls.__name__, view_id, view_type, level)
result = cls._fields_view_get_cache.get(key)
if result:
return result
@@ -563,6 +567,9 @@
User = pool.get('res.user')
ActionWindow = pool.get('ir.action.act_window')
+ is_administrator = User.is_administrator()
+ groups = set(User.get_groups())
+
if fields_width is None:
fields_width = collections.defaultdict(list)
if fields_optional is None:
@@ -657,17 +664,17 @@
states = cls._buttons[button_name]
else:
states = {}
- groups = set(User.get_groups())
button_attr = Button.get_view_attributes(
cls.__name__, button_name)
for attr, value in button_attr.items():
if not element.get(attr):
element.set(attr, value or '')
button_groups = Button.get_groups(cls.__name__, button_name)
- if ((button_groups and not groups & button_groups)
- or (not button_groups
- and not ModelAccess.get_access(
- [cls.__name__])[cls.__name__]['write'])):
+ if (not is_administrator
+ and ((button_groups and not groups & button_groups)
+ or (not button_groups
+ and not ModelAccess.get_access(
+ [cls.__name__])[cls.__name__]['write']))):
states = states.copy()
states['readonly'] = True
element.set('states', encoder.encode(states))