diff --git a/odoo/addons/base/res/res_users.py b/odoo/addons/base/res/res_users.py index c56211f4138..89e604d54e8 100644 --- a/odoo/addons/base/res/res_users.py +++ b/odoo/addons/base/res/res_users.py @@ -281,6 +281,19 @@ class Users(models.Model): def onchange_parent_id(self): return self.mapped('partner_id').onchange_parent_id() + def _read_from_database(self, field_names, inherited_field_names=[]): + super(Users, self)._read_from_database(field_names, inherited_field_names) + canwrite = self.check_access_rights('write', raise_exception=False) + if not canwrite and set(USER_PRIVATE_FIELDS).intersection(field_names): + for record in self: + for f in USER_PRIVATE_FIELDS: + try: + record._cache[f] + record._cache[f] = '********' + except Exception: + # skip SpecialValue (e.g. for missing record or access right) + pass + @api.multi @api.constrains('company_id', 'company_ids') def _check_company(self): @@ -304,17 +317,7 @@ class Users(models.Model): # safe fields only, so we read as super-user to bypass access rights self = self.sudo() - result = super(Users, self).read(fields=fields, load=load) - - canwrite = self.env['ir.model.access'].check('res.users', 'write', False) - if not canwrite: - for vals in result: - if vals['id'] != self._uid: - for key in USER_PRIVATE_FIELDS: - if key in vals: - vals[key] = '********' - - return result + return super(Users, self).read(fields=fields, load=load) @api.model def read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True):