[FIX] mail: verify attachment access early to avoid errors later
This commit is contained in:
@@ -64,7 +64,18 @@ class MailMail(models.Model):
|
||||
# notification field: if not set, set if mail comes from an existing mail.message
|
||||
if 'notification' not in values and values.get('mail_message_id'):
|
||||
values['notification'] = True
|
||||
return super(MailMail, self).create(values)
|
||||
new_mail = super(MailMail, self).create(values)
|
||||
if values.get('attachment_ids'):
|
||||
new_mail.attachment_ids.check(mode='read')
|
||||
return new_mail
|
||||
|
||||
@api.multi
|
||||
def write(self, vals):
|
||||
res = super(MailMail, self).write(vals)
|
||||
if vals.get('attachment_ids'):
|
||||
for mail in self:
|
||||
mail.attachment_ids.check(mode='read')
|
||||
return res
|
||||
|
||||
@api.multi
|
||||
def unlink(self):
|
||||
|
||||
@@ -967,6 +967,10 @@ class Message(models.Model):
|
||||
# delegate creation of tracking after the create as sudo to avoid access rights issues
|
||||
tracking_values_cmd = values.pop('tracking_value_ids', False)
|
||||
message = super(Message, self).create(values)
|
||||
|
||||
if values.get('attachment_ids'):
|
||||
message.attachment_ids.check(mode='read')
|
||||
|
||||
if tracking_values_cmd:
|
||||
vals_lst = [dict(cmd[2], mail_message_id=message.id) for cmd in tracking_values_cmd if len(cmd) == 3 and cmd[0] == 0]
|
||||
other_cmd = [cmd for cmd in tracking_values_cmd if len(cmd) != 3 or cmd[0] != 0]
|
||||
@@ -992,6 +996,9 @@ class Message(models.Model):
|
||||
if 'model' in vals or 'res_id' in vals:
|
||||
self._invalidate_documents()
|
||||
res = super(Message, self).write(vals)
|
||||
if vals.get('attachment_ids'):
|
||||
for mail in self:
|
||||
mail.attachment_ids.check(mode='read')
|
||||
if 'notification_ids' in vals or 'model' in vals or 'res_id' in vals:
|
||||
self._invalidate_documents()
|
||||
return res
|
||||
|
||||
Reference in New Issue
Block a user