@@ -336,3 +336,38 @@ def test_05_create_uid_on_transient_model(self):
336336 wizard = self .env ["mail.wizard.invite" ].browse (settings_id )
337337 self .assertIn ("Hello" , wizard .message )
338338 self .assertEqual (wizard .create_uid , self .demo_user )
339+
340+ def test_06_limit_access_to_admin (self ):
341+ """
342+ Test restriction on impersonating admin users
343+ with 'Administration: Settings' access rights.
344+ """
345+ config_settings = self .env ["res.config.settings" ].create (
346+ {"restrict_impersonate_admin_settings" : True }
347+ )
348+ config_settings .execute ()
349+
350+ config_restrict = (
351+ self .env ["ir.config_parameter" ]
352+ .sudo ()
353+ .get_param ("impersonate_login.restrict_impersonate_admin_settings" )
354+ )
355+ self .assertTrue (config_restrict )
356+
357+ admin_settings_group = self .env .ref ("base.group_system" )
358+ self .admin_user .group_ids += admin_settings_group
359+
360+ self .authenticate (user = "demo" , password = "demo" )
361+ self .assertEqual (self .session .uid , self .demo_user .id )
362+
363+ self .demo_user .group_ids += self .env .ref (
364+ "impersonate_login.group_impersonate_login"
365+ )
366+
367+ with mute_logger ("odoo.http" ):
368+ data = self ._impersonate_user (self .admin_user )
369+ self .assertEqual (
370+ data ["error" ]["data" ]["message" ],
371+ "You cannot impersonate users with "
372+ "'Administration: Settings' access rights." ,
373+ )
0 commit comments