Skip to content

Commit c5545fe

Browse files
committed
[18.0][FIX] impersonate_login access issues
1 parent 2eb4fed commit c5545fe

2 files changed

Lines changed: 50 additions & 0 deletions

File tree

impersonate_login/models/model.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,17 @@
99
class BaseModel(models.AbstractModel):
1010
_inherit = "base"
1111

12+
def _keep_real_user_on_create_write(self):
13+
# Avoid overriding the create_uid and write_uid
14+
# when the model is abstract or transient
15+
if self._abstract or self._transient:
16+
return True
17+
return False
18+
1219
def _prepare_create_values(self, vals_list):
1320
result_vals_list = super()._prepare_create_values(vals_list)
21+
if self._keep_real_user_on_create_write():
22+
return result_vals_list
1423
if (
1524
request
1625
and request.session.impersonate_from_uid
@@ -23,6 +32,8 @@ def _prepare_create_values(self, vals_list):
2332
def write(self, vals):
2433
"""Overwrite the write_uid with the impersonating user"""
2534
res = super().write(vals)
35+
if self._keep_real_user_on_create_write():
36+
return res
2637
if (
2738
request
2839
and request.session.impersonate_from_uid

impersonate_login/tests/test_impersonate_login.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,3 +263,42 @@ def test_04_write_uid(self):
263263
self.assertEqual(contact.id, contact_id)
264264
self.assertEqual(contact.ref, "abc")
265265
self.assertEqual(contact.write_uid, self.admin_user)
266+
267+
def test_05_create_uid_on_transient_model(self):
268+
"""Check the create_uid of records created
269+
during an impersonated session on a transient model"""
270+
# Login as admin
271+
self.authenticate(user="admin", password="admin")
272+
273+
# Impersonate demo user and create a wizard record
274+
self._impersonate_user(self.demo_user)
275+
276+
response = self.url_open(
277+
"/web/dataset/call_kw/mail.wizard.invite/web_save",
278+
data=json.dumps(
279+
{
280+
"params": {
281+
"model": "mail.wizard.invite",
282+
"method": "web_save",
283+
"args": [
284+
[],
285+
{
286+
"res_model": "res.partner",
287+
"message": "Hello",
288+
},
289+
{},
290+
],
291+
"kwargs": {},
292+
},
293+
}
294+
),
295+
headers={"Content-Type": "application/json"},
296+
)
297+
self.assertEqual(response.status_code, 200)
298+
data = response.json()
299+
result = data["result"]
300+
settings_id = result[0]["id"]
301+
302+
wizard = self.env["mail.wizard.invite"].browse(settings_id)
303+
self.assertIn("Hello", wizard.message)
304+
self.assertEqual(wizard.create_uid, self.demo_user)

0 commit comments

Comments
 (0)