diff options
| author | Raphael Collet <rco@openerp.com> | 2016-11-25 10:01:14 +0100 |
|---|---|---|
| committer | Raphael Collet <rco@openerp.com> | 2017-01-03 16:52:49 +0100 |
| commit | 5d746d0ac663232d656bb57e82fec290bb5d82fd (patch) | |
| tree | f1d51602745c28b43ab84a309fcbc7080c60e5c9 /addons/mail | |
| parent | 1abd543f1412cf16953fd28659baabf1e4df6010 (diff) | |
[IMP] base, *: tighten `ir.model` access rights
Remove unrestricted "read" access. To make code internally using `ir.model`
work, add a private method `_get` on `ir.model` to retrieve the record
corresponding to a model name, without access rights issue.
Change signature of method `get_authorized_fields` to make it use a model name
instead of a model id. This removes the necessity of a search on `ir.model`.
Diffstat (limited to 'addons/mail')
| -rw-r--r-- | addons/mail/models/mail_alias.py | 4 | ||||
| -rw-r--r-- | addons/mail/models/mail_followers.py | 2 | ||||
| -rw-r--r-- | addons/mail/models/mail_mail.py | 2 | ||||
| -rw-r--r-- | addons/mail/models/mail_template.py | 8 | ||||
| -rw-r--r-- | addons/mail/models/mail_thread.py | 6 | ||||
| -rw-r--r-- | addons/mail/models/res_partner.py | 2 | ||||
| -rw-r--r-- | addons/mail/tests/test_mail_followers.py | 6 | ||||
| -rw-r--r-- | addons/mail/tests/test_mail_gateway.py | 4 | ||||
| -rw-r--r-- | addons/mail/tests/test_mail_template.py | 2 | ||||
| -rw-r--r-- | addons/mail/wizard/invite.py | 5 | ||||
| -rw-r--r-- | addons/mail/wizard/mail_compose_message.py | 8 |
11 files changed, 23 insertions, 26 deletions
diff --git a/addons/mail/models/mail_alias.py b/addons/mail/models/mail_alias.py index eee18d10c5b..07d6bfb3d58 100644 --- a/addons/mail/models/mail_alias.py +++ b/addons/mail/models/mail_alias.py @@ -111,10 +111,10 @@ class Alias(models.Model): if vals.get('alias_name'): vals['alias_name'] = self._clean_and_make_unique(vals.get('alias_name')) if model_name: - model = self.env['ir.model'].search([('model', '=', model_name)]) + model = self.env['ir.model']._get(model_name) vals['alias_model_id'] = model.id if parent_model_name: - model = self.env['ir.model'].search([('model', '=', parent_model_name)]) + model = self.env['ir.model']._get(parent_model_name) vals['alias_parent_model_id'] = model.id return super(Alias, self).create(vals) diff --git a/addons/mail/models/mail_followers.py b/addons/mail/models/mail_followers.py index 9187917643a..825053f4e36 100644 --- a/addons/mail/models/mail_followers.py +++ b/addons/mail/models/mail_followers.py @@ -40,7 +40,7 @@ class Followers(models.Model): :param force: if True, delete existing followers before creating new one using the subtypes given in the parameters """ - res_model_id = self.env['ir.model'].search([('model', '=', res_model)], limit=1).id + res_model_id = self.env['ir.model']._get(res_model).id force_mode = force or (all(data for data in partner_data.values()) and all(data for data in channel_data.values())) generic = [] specific = {} diff --git a/addons/mail/models/mail_mail.py b/addons/mail/models/mail_mail.py index 527afc1c0cd..04d9fedde24 100644 --- a/addons/mail/models/mail_mail.py +++ b/addons/mail/models/mail_mail.py @@ -212,7 +212,7 @@ class MailMail(models.Model): try: # TDE note: remove me when model_id field is present on mail.message - done here to avoid doing it multiple times in the sub method if mail.model: - model = self.env['ir.model'].sudo().search([('model', '=', mail.model)])[0] + model = self.env['ir.model']._get(mail.model)[0] else: model = None if model: diff --git a/addons/mail/models/mail_template.py b/addons/mail/models/mail_template.py index a819c8d99a9..b4e66e71f33 100644 --- a/addons/mail/models/mail_template.py +++ b/addons/mail/models/mail_template.py @@ -106,7 +106,7 @@ class MailTemplate(models.Model): def default_get(self, fields): res = super(MailTemplate, self).default_get(fields) if res.get('model'): - res['model_id'] = self.env['ir.model'].search([('model', '=', res.pop('model'))]).id + res['model_id'] = self.env['ir.model']._get(res.pop('model')).id return res name = fields.Char('Name') @@ -201,9 +201,9 @@ class MailTemplate(models.Model): def onchange_sub_model_object_value_field(self): if self.model_object_field: if self.model_object_field.ttype in ['many2one', 'one2many', 'many2many']: - models = self.env['ir.model'].search([('model', '=', self.model_object_field.relation)]) - if models: - self.sub_object = models.id + model = self.env['ir.model']._get(self.model_object_field.relation) + if model: + self.sub_object = model.id self.copyvalue = self.build_expression(self.model_object_field.name, self.sub_model_object_field and self.sub_model_object_field.name or False, self.null_value or False) else: self.sub_object = False diff --git a/addons/mail/models/mail_thread.py b/addons/mail/models/mail_thread.py index 14fdc651323..902f37bbb28 100644 --- a/addons/mail/models/mail_thread.py +++ b/addons/mail/models/mail_thread.py @@ -229,7 +229,7 @@ class MailThread(models.AbstractModel): # automatic logging unless asked not to (mainly for various testing purpose) if not self._context.get('mail_create_nolog'): - doc_name = self.env['ir.model'].search([('model', '=', self._name)]).read(['name'])[0]['name'] + doc_name = self.env['ir.model']._get(self._name).name thread.message_post(body=_('%s created') % doc_name) # auto_subscribe: take values and defaults into account @@ -663,7 +663,7 @@ class MailThread(models.AbstractModel): access_link = self._notification_link_helper('view', message_id=message.id) if message.model: - model_name = self.env['ir.model'].sudo().search([('model', '=', self.env[message.model]._name)]).name_get()[0][1] + model_name = self.env['ir.model']._get(message.model).display_name view_title = '%s %s' % (_('View'), model_name) else: view_title = _('View') @@ -1133,7 +1133,7 @@ class MailThread(models.AbstractModel): dest_aliases = Alias.search([('alias_name', 'in', rcpt_tos_localparts)]) if dest_aliases: routes = [] - for alias in dest_aliases: + for alias in dest_aliases.sudo(): user_id = alias.alias_user_id.id if not user_id: # TDE note: this could cause crashes, because no clue that the user diff --git a/addons/mail/models/res_partner.py b/addons/mail/models/res_partner.py index 3bdec9313db..ba927ac16ab 100644 --- a/addons/mail/models/res_partner.py +++ b/addons/mail/models/res_partner.py @@ -65,7 +65,7 @@ class Partner(models.Model): model_name = False if message.model: - model_name = self.env['ir.model'].sudo().search([('model', '=', self.env[message.model]._name)]).name_get()[0][1] + model_name = self.env['ir.model']._get(message.model).display_name record_name = message.record_name diff --git a/addons/mail/tests/test_mail_followers.py b/addons/mail/tests/test_mail_followers.py index c51978993bb..7a82f09f381 100644 --- a/addons/mail/tests/test_mail_followers.py +++ b/addons/mail/tests/test_mail_followers.py @@ -25,7 +25,7 @@ class TestMailFollowers(TestMail): 'mail.channel', groups.ids, {self.user_employee.partner_id.id: [self.mt_mg_nodef.id]}, {test_channel.id: [self.mt_al_nodef.id]}) - mail_channel_model_id = self.env['ir.model'].search([('model', '=', 'mail.channel')], limit=1).id + mail_channel_model_id = self.env['ir.model']._get('mail.channel').id self.assertFalse(specific) self.assertEqual(len(generic), 2) @@ -40,7 +40,7 @@ class TestMailFollowers(TestMail): def test_m2o_command_update_selective(self): test_channel = self.env['mail.channel'].create({'name': 'Test'}) - mail_channel_model_id = self.env['ir.model'].search([('model', '=', 'mail.channel')], limit=1).id + mail_channel_model_id = self.env['ir.model']._get('mail.channel').id groups = self.group_pigs | self.group_public self.env['mail.followers'].create({'partner_id': self.user_employee.partner_id.id, 'res_model_id': mail_channel_model_id, 'res_id': self.group_pigs.id}) generic, specific = self.env['mail.followers']._add_follower_command( @@ -136,7 +136,7 @@ class TestMailFollowers(TestMail): }) with self.assertRaises(IntegrityError): self.env['mail.followers'].create({ - 'res_model_id': self.env['ir.model'].search([('model', '=', 'mail.channel')], limit=1).id, + 'res_model_id': self.env['ir.model']._get('mail.channel').id, 'res_id': test_channel.id, 'partner_id': self.user_employee.partner_id.id, 'channel_id': self.group_pigs.id, diff --git a/addons/mail/tests/test_mail_gateway.py b/addons/mail/tests/test_mail_gateway.py index fd2f80ce103..c017a88df67 100644 --- a/addons/mail/tests/test_mail_gateway.py +++ b/addons/mail/tests/test_mail_gateway.py @@ -291,7 +291,7 @@ class TestMailgateway(TestMail): def setUp(self): super(TestMailgateway, self).setUp() # groups@.. will cause the creation of new mail.channels - self.mail_channel_model = self.env['ir.model'].search([('model', '=', 'mail.channel')], limit=1) + self.mail_channel_model = self.env['ir.model']._get('mail.channel') self.alias = self.env['mail.alias'].create({ 'alias_name': 'groups', 'alias_user_id': False, @@ -299,7 +299,7 @@ class TestMailgateway(TestMail): 'alias_contact': 'everyone'}) # test@.. will cause the creation of new mail.test - self.mail_test_model = self.env['ir.model'].search([('model', '=', 'mail.test')], limit=1) + self.mail_test_model = self.env['ir.model']._get('mail.test') self.alias_2 = self.env['mail.alias'].create({ 'alias_name': 'test', 'alias_user_id': False, diff --git a/addons/mail/tests/test_mail_template.py b/addons/mail/tests/test_mail_template.py index da335d741a4..26a0336b0fe 100644 --- a/addons/mail/tests/test_mail_template.py +++ b/addons/mail/tests/test_mail_template.py @@ -32,7 +32,7 @@ class TestMailTemplate(TestMail): self.email_2 = 'test2@example.com' self.email_3 = self.partner_1.email self.email_template = self.env['mail.template'].create({ - 'model_id': self.env['ir.model'].search([('model', '=', 'mail.channel')], limit=1).id, + 'model_id': self.env['ir.model']._get('mail.channel').id, 'name': 'Pigs Template', 'subject': '${object.name}', 'body_html': '${object.description}', diff --git a/addons/mail/wizard/invite.py b/addons/mail/wizard/invite.py index 1d345af517a..acb89641f75 100644 --- a/addons/mail/wizard/invite.py +++ b/addons/mail/wizard/invite.py @@ -18,7 +18,7 @@ class Invite(models.TransientModel): if self._context.get('mail_invite_follower_channel_only'): result['send_mail'] = False if 'message' in fields and model and res_id: - model_name = self.env['ir.model'].search([('model', '=', model)]).name_get()[0][1] + model_name = self.env['ir.model']._get(model).display_name document_name = self.env[model].browse(res_id).name_get()[0][1] message = _('<div><p>Hello,</p><p>%s invited you to follow %s document: %s.</p></div>') % (user_name, model_name, document_name) result['message'] = message @@ -46,8 +46,7 @@ class Invite(models.TransientModel): new_channels = wizard.channel_ids - document.message_channel_ids document.message_subscribe(new_partners.ids, new_channels.ids) - model_ids = self.env['ir.model'].search([('model', '=', wizard.res_model)]) - model_name = model_ids.name_get()[0][1] + model_name = self.env['ir.model']._get(wizard.res_model).display_name # send an email if option checked and if a message exists (do not send void emails) if wizard.send_mail and wizard.message and not wizard.message == '<br>': # when deleting the message, cleditor keeps a <br> message = self.env['mail.message'].create({ diff --git a/addons/mail/wizard/mail_compose_message.py b/addons/mail/wizard/mail_compose_message.py index bc27da14e7c..35114a2542b 100644 --- a/addons/mail/wizard/mail_compose_message.py +++ b/addons/mail/wizard/mail_compose_message.py @@ -392,16 +392,14 @@ class MailComposer(models.TransientModel): """ hit save as template button: current form value will be a new template attached to the current document. """ for record in self: - models = self.env['ir.model'].search([('model', '=', record.model or 'mail.message')]) - model_name = '' - if models: - model_name = models.name + model = self.env['ir.model']._get(record.model or 'mail.message') + model_name = model.name or '' template_name = "%s: %s" % (model_name, tools.ustr(record.subject)) values = { 'name': template_name, 'subject': record.subject or False, 'body_html': record.body or False, - 'model_id': models.id or False, + 'model_id': model.id or False, 'attachment_ids': [(6, 0, [att.id for att in record.attachment_ids])], } template = self.env['mail.template'].create(values) |
