diff --git a/README.md b/README.md index cae134c9c5..887490c55b 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ addon | version | maintainers | summary [base_user_empty_password](base_user_empty_password/) | 18.0.1.0.0 | grindtildeath | Allows to empty password of users [base_user_show_email](base_user_show_email/) | 18.0.1.0.0 | | Untangle user login and email [cross_connect_client](cross_connect_client/) | 18.0.1.0.0 | paradoxxxzero | Cross Connect Client allows to connect to a Cross Connect Server enabled odoo instance. -[impersonate_login](impersonate_login/) | 18.0.1.1.0 | Kev-Roche | tools +[impersonate_login](impersonate_login/) | 18.0.1.1.1 | Kev-Roche | tools [password_security](password_security/) | 18.0.1.0.0 | | Allow admin to set password security requirements. [user_log_view](user_log_view/) | 18.0.1.0.0 | trojikman | Allow to see user's actions log [users_ldap_mail](users_ldap_mail/) | 18.0.1.0.0 | joao-p-marques | LDAP mapping for user name and e-mail diff --git a/impersonate_login/README.rst b/impersonate_login/README.rst index 2b71b498b5..6341970cdb 100644 --- a/impersonate_login/README.rst +++ b/impersonate_login/README.rst @@ -11,7 +11,7 @@ Impersonate Login !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:0f4564be316d51d716922597d0fbfc4ba6ee6b58b19243f17fc445dd6d9d3a4c + !! source digest: sha256:7a065218446f1a1c3d7c8df01e153960f15c80d7fc12534272a2e700896ca757 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/impersonate_login/__manifest__.py b/impersonate_login/__manifest__.py index e7a9ef963f..3edddc524c 100644 --- a/impersonate_login/__manifest__.py +++ b/impersonate_login/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Impersonate Login", "summary": "tools", - "version": "18.0.1.1.0", + "version": "18.0.1.1.1", "category": "Tools", "website": "https://github.com/OCA/server-auth", "author": "Akretion, Odoo Community Association (OCA)", diff --git a/impersonate_login/models/model.py b/impersonate_login/models/model.py index 726c57ccad..8b99ff27bc 100644 --- a/impersonate_login/models/model.py +++ b/impersonate_login/models/model.py @@ -9,8 +9,17 @@ class BaseModel(models.AbstractModel): _inherit = "base" + def _keep_real_user_on_create_write(self): + # Avoid overriding the create_uid and write_uid + # when the model is abstract or transient + if self._abstract or self._transient: + return True + return False + def _prepare_create_values(self, vals_list): result_vals_list = super()._prepare_create_values(vals_list) + if self._keep_real_user_on_create_write(): + return result_vals_list if ( request and request.session.impersonate_from_uid @@ -23,6 +32,8 @@ def _prepare_create_values(self, vals_list): def write(self, vals): """Overwrite the write_uid with the impersonating user""" res = super().write(vals) + if self._keep_real_user_on_create_write(): + return res if ( request and request.session.impersonate_from_uid diff --git a/impersonate_login/static/description/index.html b/impersonate_login/static/description/index.html index 1cf66496f8..487b9f02d5 100644 --- a/impersonate_login/static/description/index.html +++ b/impersonate_login/static/description/index.html @@ -372,7 +372,7 @@

Impersonate Login

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:0f4564be316d51d716922597d0fbfc4ba6ee6b58b19243f17fc445dd6d9d3a4c +!! source digest: sha256:7a065218446f1a1c3d7c8df01e153960f15c80d7fc12534272a2e700896ca757 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: AGPL-3 OCA/server-auth Translate me on Weblate Try me on Runboat

This module allows one user (for example, a member of the support team) diff --git a/impersonate_login/tests/test_impersonate_login.py b/impersonate_login/tests/test_impersonate_login.py index b6a4f352eb..667e13660c 100644 --- a/impersonate_login/tests/test_impersonate_login.py +++ b/impersonate_login/tests/test_impersonate_login.py @@ -263,3 +263,42 @@ def test_04_write_uid(self): self.assertEqual(contact.id, contact_id) self.assertEqual(contact.ref, "abc") self.assertEqual(contact.write_uid, self.admin_user) + + def test_05_create_uid_on_transient_model(self): + """Check the create_uid of records created + during an impersonated session on a transient model""" + # Login as admin + self.authenticate(user="admin", password="admin") + + # Impersonate demo user and create a wizard record + self._impersonate_user(self.demo_user) + + response = self.url_open( + "/web/dataset/call_kw/mail.wizard.invite/web_save", + data=json.dumps( + { + "params": { + "model": "mail.wizard.invite", + "method": "web_save", + "args": [ + [], + { + "res_model": "res.partner", + "message": "Hello", + }, + {}, + ], + "kwargs": {}, + }, + } + ), + headers={"Content-Type": "application/json"}, + ) + self.assertEqual(response.status_code, 200) + data = response.json() + result = data["result"] + settings_id = result[0]["id"] + + wizard = self.env["mail.wizard.invite"].browse(settings_id) + self.assertIn("Hello", wizard.message) + self.assertEqual(wizard.create_uid, self.demo_user)