From c3717f3018ce0571aa41f70da4262cc946d883b4 Mon Sep 17 00:00:00 2001 From: Yannick Tivisse Date: Fri, 7 Sep 2018 10:10:39 +0200 Subject: [PATCH] [IMP] base: Erase user's groups if converted to public/portal --- addons/hr_expense/tests/common.py | 2 +- addons/sale/tests/test_sale_common.py | 2 +- addons/sale/tests/test_sale_order.py | 5 +++-- odoo/addons/base/models/res_users.py | 7 +++++-- odoo/addons/base/tests/test_non_regression.py | 12 +++++++++--- 5 files changed, 19 insertions(+), 9 deletions(-) diff --git a/addons/hr_expense/tests/common.py b/addons/hr_expense/tests/common.py index 0ff8e27fba0..0a6a6cb838d 100644 --- a/addons/hr_expense/tests/common.py +++ b/addons/hr_expense/tests/common.py @@ -15,7 +15,7 @@ class TestExpenseCommon(TestAccountNoChartCommon): # The user manager is only expense manager user_group_manager = cls.env.ref('hr_expense.group_hr_expense_manager') cls.user_manager.write({ - 'groups_id': [(6, 0, [user_group_manager.id])], + 'groups_id': [(6, 0, [user_group_manager.id, cls.env.ref('base.group_user').id])], }) # create employee diff --git a/addons/sale/tests/test_sale_common.py b/addons/sale/tests/test_sale_common.py index b361d3add92..f3f99a303e2 100644 --- a/addons/sale/tests/test_sale_common.py +++ b/addons/sale/tests/test_sale_common.py @@ -17,7 +17,7 @@ class TestSale(AccountingTestCase): 'email': 'a.m@example.com', 'signature': '--\nAndreww', 'notification_type': 'email', - 'groups_id': [(6, 0, [group_manager.id])] + 'groups_id': [(6, 0, [group_manager.id, self.env.ref('base.group_user').id])] }) self.user = self.env['res.users'].create({ 'name': 'Mark User', diff --git a/addons/sale/tests/test_sale_order.py b/addons/sale/tests/test_sale_order.py index 5e59b6b7a83..78a1afec795 100644 --- a/addons/sale/tests/test_sale_order.py +++ b/addons/sale/tests/test_sale_order.py @@ -21,8 +21,9 @@ class TestSaleOrder(TestCommonSaleNoChart): cls.setUpUsers() group_salemanager = cls.env.ref('sales_team.group_sale_manager') group_salesman = cls.env.ref('sales_team.group_sale_salesman') - cls.user_manager.write({'groups_id': [(6, 0, [group_salemanager.id])]}) - cls.user_employee.write({'groups_id': [(6, 0, [group_salesman.id])]}) + group_employee = cls.env.ref('base.group_user') + cls.user_manager.write({'groups_id': [(6, 0, [group_salemanager.id, group_employee.id])]}) + cls.user_employee.write({'groups_id': [(6, 0, [group_salesman.id, group_employee.id])]}) # set up accounts and products and journals cls.setUpAdditionalAccounts() diff --git a/odoo/addons/base/models/res_users.py b/odoo/addons/base/models/res_users.py index 45415d55793..eb649d3943f 100644 --- a/odoo/addons/base/models/res_users.py +++ b/odoo/addons/base/models/res_users.py @@ -772,8 +772,11 @@ class UsersImplied(models.Model): if values.get('groups_id'): # add implied groups for all users 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]} + if not user.has_group('base.group_user'): + vals = {'groups_id': [(5, 0, 0)] + values['groups_id']} + else: + 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, user).write(vals) return res diff --git a/odoo/addons/base/tests/test_non_regression.py b/odoo/addons/base/tests/test_non_regression.py index 1f75578079a..12faee0e1f0 100644 --- a/odoo/addons/base/tests/test_non_regression.py +++ b/odoo/addons/base/tests/test_non_regression.py @@ -8,8 +8,11 @@ from openerp.tests.common import TransactionCase class TestNR(TransactionCase): def test_issue26036(self): + # Coming from https://github.com/odoo/odoo/pull/26036 U = self.env["res.users"] G = self.env["res.groups"] + group_user = self.env.ref('base.group_user') + group_no_one = self.env.ref('base.group_no_one') group_A = G.create({"name": "A"}) group_AA = G.create({"name": "AA", "implied_ids": [(6, 0, [group_A.id])]}) @@ -17,10 +20,13 @@ class TestNR(TransactionCase): 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_a = U.create({"name": "a", "login": "a", "groups_id": [(6, 0, [group_AA.id, group_user.id])]}) user_b = U.create({"name": "b", "login": "b", "groups_id": [(6, 0, [group_BB.id])]}) + self.assertEqual(user_a.groups_id, (group_AA + group_A + group_user + group_no_one)) + (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)) + self.assertEqual(user_a.groups_id, (group_AA + group_A + group_C + group_user + group_no_one)) + # As user_b is not an internal user, all its groups are removed + self.assertEqual(user_b.groups_id, group_C)