@@ -258,3 +258,37 @@ def test_04_write_uid(self):
258258 self .assertEqual (result , True )
259259 self .assertEqual (contact .ref , "abc" )
260260 self .assertEqual (contact .write_uid , self .admin_user )
261+
262+ def test_05_limit_access_to_admin (self ):
263+ """
264+ Test restriction on impersonating admin users
265+ with 'Administration: Settings' access rights.
266+ """
267+ config_settings = self .env ["res.config.settings" ].create (
268+ {"restrict_impersonate_admin_settings" : True }
269+ )
270+ config_settings .execute ()
271+
272+ config_restrict = (
273+ self .env ["ir.config_parameter" ]
274+ .sudo ()
275+ .get_param ("impersonate_login.restrict_impersonate_admin_settings" )
276+ )
277+ self .assertTrue (config_restrict )
278+
279+ admin_settings_group = self .env .ref ("base.group_system" )
280+ self .admin_user .groups_id += admin_settings_group
281+
282+ self .authenticate (user = "demo" , password = "demo" )
283+ self .assertEqual (self .session .uid , self .demo_user .id )
284+
285+ self .demo_user .groups_id += self .env .ref (
286+ "impersonate_login.group_impersonate_login"
287+ )
288+
289+ with mute_logger ("odoo.http" ):
290+ data = self ._impersonate_user (self .admin_user )
291+ self .assertEqual (
292+ data ["error" ]["data" ]["message" ],
293+ "You cannot impersonate users with 'Administration: Settings' access rights." ,
294+ )
0 commit comments