应用备案规则后无法确认销售订单

Can't confirm sale orders after applying record rule

在odoo 9中,我在模型mrp.production上添加了一条记录规则:

['|', ('user_id', '=', user.id), ('user_id', '=', False)]

这将只向用户显示属于他们的 MO。现在,当我尝试确认销售订单,然后为该销售订单中的行创建 MO 时,出现访问错误:

The requested operation cannot be completed due to security restrictions. Please contact your system administrator.

(Document type: mrp.production, Operation: read) 

诊断更多我发现它是由 missing_ids 引起的。看看this

在此之前,我在 openerp 7 中使用了相同的解决方案,并且在确认 SO 时它仍然运行完美,没有任何访问错误。

您是从哪个用户那里试用的?我认为您正在尝试使用管理员登录,并且您编写了安全规则,只有该记录的用户才能访问它。我认为这是问题所在。

终于找到问题的原因了

在 opernep/addons/mrp/procurement.py 中有行

production_obj.create(cr, SUPERUSER_ID, vals, context=dict(context, force_company=procurement.company_id.id))

正在使用 SUPERUSER_ID 从采购中创建生产订单。

我不知道为什么他们将其更改为使用 SUPERUSER_ID。可能是为了使非 mrp 用户或外部用户即使没有权限也可以创建 mrp 订单。顺便说一句,我没有这样的要求,我已经通过用 uid.

替换这个 SUPERUSER_ID 解决了我的问题