[FIX] mail, hr: bypass user_has_groups() in superuser mode

This commit is contained in:
Raphael Collet
2019-07-04 11:32:22 +00:00
parent 368e9530f4
commit da5021f704
5 changed files with 20 additions and 10 deletions
@@ -524,6 +524,8 @@ class HolidaysAllocation(models.Model):
def _check_approval_update(self, state):
""" Check if target state is achievable. """
if self.env.is_superuser():
return
current_employee = self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1)
if not current_employee:
return
+1 -1
View File
@@ -352,7 +352,7 @@ class Message(models.Model):
tracking_tree = dict.fromkeys(tracking_values.ids, False)
for tracking in tracking_values:
groups = tracking.field_groups
if not groups or self.user_has_groups(groups):
if not groups or self.env.is_superuser() or self.user_has_groups(groups):
message_to_tracking.setdefault(tracking.mail_message_id.id, list()).append(tracking.id)
tracking_tree[tracking.id] = {
'id': tracking.id,
+1 -1
View File
@@ -2189,7 +2189,7 @@ class MailThread(models.AbstractModel):
if msg_vals.get('tracking_value_ids', True) if msg_vals else bool(self): # could be tracking
for tracking_value in self.env['mail.tracking.value'].sudo().search([('mail_message_id', '=', message.id)]):
groups = tracking_value.field_groups
if not groups or self.user_has_groups(groups):
if not groups or self.env.is_superuser() or self.user_has_groups(groups):
tracking.append((tracking_value.field_desc,
tracking_value.get_old_display_value()[0],
tracking_value.get_new_display_value()[0]))
+15 -7
View File
@@ -151,22 +151,30 @@ class TestTracking(common.BaseFunctionalTest, common.MockEmails):
self.assertEqual(tracking_values[2].tracking_sequence, 100)
def test_track_groups(self):
self.record._fields['email_from'].groups = 'base.group_erp_manager' # patch the group attribute
# patch the group attribute
field = self.record._fields['email_from']
self.addCleanup(setattr, field, 'groups', field.groups)
field.groups = 'base.group_erp_manager'
self.record.sudo().write({'email_from': 'X'})
msg_emp = self.record.message_ids.message_format()
msg_admin = self.record.message_ids.with_user(self.user_admin).message_format()
msg_sudo = self.record.sudo().message_ids.message_format()
self.assertFalse(msg_emp[0].get('tracking_value_ids'), "should not have protected tracking values")
self.assertTrue(msg_admin[0].get('tracking_value_ids'), "should have protected tracking values")
self.assertTrue(msg_sudo[0].get('tracking_value_ids'), "should have protected tracking values")
def test_notify_track_groups(self):
self.record._fields['email_from'].groups = 'base.group_erp_manager' # patch the group attribute
# patch the group attribute
field = self.record._fields['email_from']
self.addCleanup(setattr, field, 'groups', field.groups)
field.groups = 'base.group_erp_manager'
self.record.sudo().write({'email_from': 'X'})
msg_emp = self.record.with_user(self.user_employee)._notify_prepare_template_context(self.record.message_ids, {})
msg_admin = self.record.with_user(self.user_admin)._notify_prepare_template_context(self.record.message_ids, {})
msg_emp = self.record._notify_prepare_template_context(self.record.message_ids, {})
msg_sudo = self.record.sudo()._notify_prepare_template_context(self.record.message_ids, {})
self.assertFalse(msg_emp.get('tracking_values'), "should not have protected tracking values")
self.assertTrue(msg_admin.get('tracking_values'), "should have protected tracking values")
self.assertTrue(msg_sudo.get('tracking_values'), "should have protected tracking values")
def test_unlinked_field(self):
record_sudo = self.record.sudo()
+1 -1
View File
@@ -2703,7 +2703,7 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})):
for fname, field in self._fields.items():
if allfields and fname not in allfields:
continue
if field.groups and not self.user_has_groups(field.groups):
if field.groups and not self.env.su and not self.user_has_groups(field.groups):
continue
description = field.get_description(self.env)