From aa8eba2fb95e5539deea776e850a46da6e2c52c7 Mon Sep 17 00:00:00 2001 From: Martin Trigaux Date: Mon, 12 Apr 2021 09:48:01 +0200 Subject: [PATCH] [FIX] *: add sudo when accessing models --- addons/google_drive/models/google_drive.py | 2 +- addons/mail/models/mail_activity.py | 3 ++- addons/mail/models/mail_thread.py | 10 ++++++---- addons/mail/models/res_users.py | 2 +- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/addons/google_drive/models/google_drive.py b/addons/google_drive/models/google_drive.py index b8b8aff5bea..162986d6fe7 100644 --- a/addons/google_drive/models/google_drive.py +++ b/addons/google_drive/models/google_drive.py @@ -154,7 +154,7 @@ class GoogleDrive(models.Model): ''' # TO DO in master: fix my signature and my model if isinstance(res_model, str): - res_model = self.env['ir.model'].search([('model', '=', res_model)]).id + res_model = self.env['ir.model'].sudo().search([('model', '=', res_model)]).id if not res_id: raise UserError(_("Creating google drive may only be done by one at a time.")) # check if a model is configured with a template diff --git a/addons/mail/models/mail_activity.py b/addons/mail/models/mail_activity.py index c7d510ecd5e..82f786f3133 100644 --- a/addons/mail/models/mail_activity.py +++ b/addons/mail/models/mail_activity.py @@ -740,7 +740,8 @@ class MailActivity(models.Model): 'o_closest_deadline': group['date_deadline'], } activity_type_infos = [] - activity_type_ids = self.env['mail.activity.type'].search(['|', ('res_model_id.model', '=', res_model), ('res_model_id', '=', False)]) + activity_type_ids = self.env['mail.activity.type'].sudo().search( + ['|', ('res_model_id.model', '=', res_model), ('res_model_id', '=', False)]) for elem in sorted(activity_type_ids, key=lambda item: item.sequence): mail_template_info = [] for mail_template_id in elem.mail_template_ids: diff --git a/addons/mail/models/mail_thread.py b/addons/mail/models/mail_thread.py index 2e79408ce85..da8e1ca81b1 100644 --- a/addons/mail/models/mail_thread.py +++ b/addons/mail/models/mail_thread.py @@ -924,20 +924,22 @@ class MailThread(models.AbstractModel): # if destination = alias with different model -> consider it is a forward and not a reply # if destination = alias with same model -> check contact settings as they still apply if reply_model and reply_thread_id: + reply_model_id = self.env['ir.model']._get_id(reply_model) other_model_aliases = self.env['mail.alias'].search([ '&', '&', ('alias_name', '!=', False), ('alias_name', 'in', email_to_localparts), - ('alias_model_id.model', '!=', reply_model), + ('alias_model_id', '!=', reply_model_id), ]) if other_model_aliases: is_a_reply = False rcpt_tos_valid_localparts = [to for to in rcpt_tos_valid_localparts if to in other_model_aliases.mapped('alias_name')] if is_a_reply: + reply_model_id = self.env['ir.model']._get_id(reply_model) dest_aliases = self.env['mail.alias'].search([ ('alias_name', 'in', rcpt_tos_localparts), - ('alias_model_id.model', '=', reply_model) + ('alias_model_id', '=', reply_model_id) ], limit=1) user_id = self._mail_find_user_for_gateway(email_from, alias=dest_aliases).id or self._uid @@ -972,7 +974,7 @@ class MailThread(models.AbstractModel): routes = [] for alias in dest_aliases: user_id = self._mail_find_user_for_gateway(email_from, alias=alias).id or self._uid - route = (alias.alias_model_id.model, alias.alias_force_thread_id, ast.literal_eval(alias.alias_defaults), user_id, alias) + route = (alias.sudo().alias_model_id.model, alias.alias_force_thread_id, ast.literal_eval(alias.alias_defaults), user_id, alias) route = self._routing_check_route(message, message_dict, route, raise_exception=True) if route: _logger.info( @@ -1536,7 +1538,7 @@ class MailThread(models.AbstractModel): if alias and alias.alias_parent_model_id and alias.alias_parent_thread_id: followers = self.env['mail.followers'].search([ - ('res_model', '=', alias.alias_parent_model_id.model), + ('res_model', '=', alias.alias_parent_model_id.sudo().model), ('res_id', '=', alias.alias_parent_thread_id)] ).mapped('partner_id') else: diff --git a/addons/mail/models/res_users.py b/addons/mail/models/res_users.py index 4c62a77f55d..7146c6ddc44 100644 --- a/addons/mail/models/res_users.py +++ b/addons/mail/models/res_users.py @@ -99,7 +99,7 @@ class Users(models.Model): }) activity_data = self.env.cr.dictfetchall() model_ids = [a['id'] for a in activity_data] - model_names = {n[0]: n[1] for n in self.env['ir.model'].browse(model_ids).name_get()} + model_names = {n[0]: n[1] for n in self.env['ir.model'].sudo().browse(model_ids).name_get()} user_activities = {} for activity in activity_data: