diff --git a/addons/im_livechat/models/res_users.py b/addons/im_livechat/models/res_users.py index 96ca99ee741..9de83ef8928 100644 --- a/addons/im_livechat/models/res_users.py +++ b/addons/im_livechat/models/res_users.py @@ -18,6 +18,10 @@ class Users(models.Model): def SELF_READABLE_FIELDS(self): return super().SELF_READABLE_FIELDS + ['livechat_username', 'livechat_lang_ids', 'has_access_livechat'] + @property + def SELF_WRITEABLE_FIELDS(self): + return super().SELF_WRITEABLE_FIELDS + ['livechat_username', 'livechat_lang_ids'] + @api.depends('res_users_settings_id.livechat_username') def _compute_livechat_username(self): for user in self: diff --git a/addons/im_livechat/tests/test_message.py b/addons/im_livechat/tests/test_message.py index daef9d8e33d..f9c1e937859 100644 --- a/addons/im_livechat/tests/test_message.py +++ b/addons/im_livechat/tests/test_message.py @@ -4,6 +4,7 @@ from markupsafe import Markup from odoo import Command +from odoo.exceptions import AccessError from odoo.tests.common import users, tagged, HttpCase @@ -25,6 +26,19 @@ class TestImLivechatMessage(HttpCase): {'name': 'test1', 'login': 'test1', 'password': self.password, 'email': 'test1@example.com', 'livechat_username': 'chuck'}, ]) + def test_update_username(self): + user = self.env['res.users'].create({ + 'name': 'User', + 'login': 'User', + 'password': self.password, + 'email': 'user@example.com', + 'livechat_username': 'edit me' + }) + with self.assertRaises(AccessError): + self.env['res.users'].with_user(user).check_access_rights('write') + user.with_user(user).livechat_username = 'New username' + self.assertEqual(user.livechat_username, 'New username') + @users('emp') def test_message_format(self): im_livechat_channel = self.env['im_livechat.channel'].sudo().create({'name': 'support', 'user_ids': [Command.link(self.users[0].id)]}) diff --git a/odoo/addons/base/models/res_lang.py b/odoo/addons/base/models/res_lang.py index 0ebfd61f430..87b84c043da 100644 --- a/odoo/addons/base/models/res_lang.py +++ b/odoo/addons/base/models/res_lang.py @@ -21,6 +21,7 @@ class Lang(models.Model): _name = "res.lang" _description = "Languages" _order = "active desc,name" + _allow_sudo_commands = False _disallowed_datetime_patterns = list(tools.DATETIME_FORMATS_MAP) _disallowed_datetime_patterns.remove('%y') # this one is in fact allowed, just not good practice