今天我们来介绍下odoo10代码中11月7日的提交3b43dd。
改进结果
这个提交是对销售线索中的复制方法进行了修改.
@api.multi
def copy(self, default=None):
self.ensure_one()
# set default value in context, if not already set (Put stage to 'new' stage)
context = dict(self._context)
context.setdefault('default_type', self.type)
context.setdefault('default_team_id', self.team_id.id)
# Set date_open to today if it is an opp
default = default or {}
default['date_open'] = fields.Datetime.now() if self.type == 'opportunity' else False
# +++++++++++++++++
# Do not assign to an archived user
if not self.user_id.active:
default['user_id'] = False
# ++++++++++++++++++
return super(Lead, self.with_context(context)).copy(default=default)
3b43dd新增代码用+++++
包裹.查看新增的代码,我们发现在新的copy方法中.对销售线索的user_id
进行了判断,若当前销售线索中的用户已经不存在了.在复制的过程中就把user_id
字段设为False.
为何要进行这个修改
我们知道,公司中的人员会时常发生变动,举个例子,公司中原有一个员工A ,在一个销售线索中(crm.lead) 我们指定销售员为A.
但是某些突发原因,A离职并交付了工作。于是人事把A员工的odoo账号归档。
现在,在创建新的销售线索时user_id
(视图中显示为销售员)字段不会出现A员工的选项。
但是,当我们复制以前的指派A为销售员的销售线索时,我们会发现user_id
字段的默认值还是A. 而且A的邮箱会收到新消息提醒信件,这会泄露公司的敏感数据.
bug重现
创建用户A
创建新的销售线索
marry要买iphone
,指定销售员为A。点击保存进入用户管理,把A用户设置为
active
字段设为False在创建新销售线索中,销售员选项中已经没有A员工。
此时,我们对刚才的
marry要买iphone
销售线索进行复制。这时,我们的A用户的邮箱就收取到odoo的发送的信件。查看下方message 组件,账号已经注销的A被添加在message组中。如果关注者较多,没有发现这个问题,那每次对销售线索的新建消息都会被同时发送到已经离职的A员工的邮箱中。这就造成了数据泄露
原始提交信息
Commit: Nicolas Martinelli <nim@odoo.com>
CommitDate: Tue Nov 7 14:47:31 2017 +0100
[FIX] crm: default user when copy
- Create a user A
- Create a lead, assign to A
- Deactivate user A
- Duplicate the lead
A notification email is sent to A (user assigned to the lead).
Since the user is archived, he should not receive any email since it
might contain sensitive information.
opw-778825
---
addons/crm/models/crm_lead.py | 3 +++
1 file changed, 3 insertions(+)
diff --git a/addons/crm/models/crm_lead.py b/addons/crm/models/crm_lead.py
index 879350c..f23d538 100644
--- a/addons/crm/models/crm_lead.py
+++ b/addons/crm/models/crm_lead.py
@@ -336,6 +336,9 @@ class Lead(FormatAddress, models.Model):
# Set date_open to today if it is an opp
default = default or {}
default['date_open'] = fields.Datetime.now() if self.type == 'opportunity' else False
+ # Do not assign to an archived user
+ if not self.user_id.active:
+ default['user_id'] = False
return super(Lead, self.with_context(context)).copy(default=default)
由此可见,3b43dd这个提交对复制后的销售线索的默认值进行了验证更新,剔除了被归档的用户。避免了敏感数据的泄露