diff --git a/web_access_rule_buttons/models/models.py b/web_access_rule_buttons/models/models.py index ed43cb817..b6b4c08c0 100644 --- a/web_access_rule_buttons/models/models.py +++ b/web_access_rule_buttons/models/models.py @@ -22,19 +22,16 @@ class Base(models.AbstractModel): operations = ["read", "create", "write", "unlink"] result = {} for operation in operations: - try: - self.check_access_rule(operation) - except exceptions.AccessError: - result[operation] = False - if ( - self.is_transient() - or self.ids - and self.env.user.has_group("base.user_admin") - ): + if self.is_transient() or not self.ids: # If we call check_access_rule() without id, it will try to # run a SELECT without ID which will crash, so we just blindly # allow the operations result[operation] = True - else: + continue + try: + self.check_access_rule(operation) + except exceptions.AccessError: result[operation] = False + else: + result[operation] = True return result diff --git a/web_access_rule_buttons/tests/test_access_rule_buttons.py b/web_access_rule_buttons/tests/test_access_rule_buttons.py index 0708507d1..582a31155 100644 --- a/web_access_rule_buttons/tests/test_access_rule_buttons.py +++ b/web_access_rule_buttons/tests/test_access_rule_buttons.py @@ -1,25 +1,38 @@ # Copyright 2019 Onestein BV # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo.tests.common import TransactionCase +from odoo.tests import common, new_test_user, users -class TestAccessRuleButtons(TransactionCase): +class TestAccessRuleButtons(common.TransactionCase): def setUp(self): - super(TestAccessRuleButtons, self).setUp() - - self.curr_obj = self.env["res.currency"] + super().setUp() self.curr_record = self.env.ref("base.USD") + new_test_user(self.env, login="test-user", groups="base.group_system") + self.env.ref("base.user_admin").write( + { + "groups_id": [(4, self.env.ref("base.group_system").id)], + } + ) + @users("admin", "test-user") def test_check_access_rule_1(self): - res = self.curr_obj.check_access_rule_all(["write"]) - self.assertFalse(res["write"]) - - def test_check_access_rule_2(self): - res = self.curr_record.check_access_rule_all(["write"]) + res = self.env["res.currency"].check_access_rule_all(["write"]) self.assertTrue(res["write"]) + @users("admin", "test-user") + def test_check_access_rule_2(self): + res = ( + self.env["res.currency"] + .browse(self.curr_record.id) + .check_access_rule_all(["write"]) + ) + self.assertTrue(res["write"]) + + @users("admin", "test-user") def test_check_access_rule_3(self): - res = self.curr_record.check_access_rule_all() + res = ( + self.env["res.currency"].browse(self.curr_record.id).check_access_rule_all() + ) self.assertTrue(res["read"]) self.assertTrue(res["create"]) self.assertTrue(res["write"])