From 65ad60665e54a7e61d3d064df63457d0097587bd Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Tue, 31 Jul 2018 16:03:33 +0200 Subject: [PATCH] [FIX] base: fix users' groups assignation Avoid sharing of users'groups when writing on multiple users. When changing groups of multiple users, all implied groups were shared between written users. Oversight of new-api rewrite. Fixes #26036 --- odoo/addons/base/res/res_users.py | 2 +- odoo/addons/base/tests/__init__.py | 1 + odoo/addons/base/tests/test_non_regression.py | 26 +++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 odoo/addons/base/tests/test_non_regression.py diff --git a/odoo/addons/base/res/res_users.py b/odoo/addons/base/res/res_users.py index a78ecb9829c..74245dced0c 100644 --- a/odoo/addons/base/res/res_users.py +++ b/odoo/addons/base/res/res_users.py @@ -679,7 +679,7 @@ class UsersImplied(models.Model): for user in self.with_context({}): gs = set(concat(g.trans_implied_ids for g in user.groups_id)) vals = {'groups_id': [(4, g.id) for g in gs]} - super(UsersImplied, self).write(vals) + super(UsersImplied, user).write(vals) return res # diff --git a/odoo/addons/base/tests/__init__.py b/odoo/addons/base/tests/__init__.py index 06c06cbbc5d..e40c2d042c3 100644 --- a/odoo/addons/base/tests/__init__.py +++ b/odoo/addons/base/tests/__init__.py @@ -31,3 +31,4 @@ import test_view_validation import test_views import test_xmlrpc import test_res_partner_bank +import test_non_regression diff --git a/odoo/addons/base/tests/test_non_regression.py b/odoo/addons/base/tests/test_non_regression.py new file mode 100644 index 00000000000..1f75578079a --- /dev/null +++ b/odoo/addons/base/tests/test_non_regression.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +""" + Non-Regression Tests +""" + +from openerp.tests.common import TransactionCase + + +class TestNR(TransactionCase): + def test_issue26036(self): + U = self.env["res.users"] + G = self.env["res.groups"] + + group_A = G.create({"name": "A"}) + group_AA = G.create({"name": "AA", "implied_ids": [(6, 0, [group_A.id])]}) + group_B = G.create({"name": "B"}) + group_BB = G.create({"name": "BB", "implied_ids": [(6, 0, [group_B.id])]}) + group_C = G.create({"name": "C"}) + + user_a = U.create({"name": "a", "login": "a", "groups_id": [(6, 0, [group_AA.id])]}) + user_b = U.create({"name": "b", "login": "b", "groups_id": [(6, 0, [group_BB.id])]}) + + (user_a + user_b).write({"groups_id": [(4, group_C.id)]}) + + self.assertEqual(user_a.groups_id, (group_AA + group_A + group_C)) + self.assertEqual(user_b.groups_id, (group_BB + group_B + group_C))