Odoo15自定义模块迁移至Odoo16时安装报错(company_id权限问题)
解决Odoo 16自定义模块迁移的company_id权限报错
问题根源
Odoo 16强化了多公司字段company_id的权限控制,当视图字段的domain直接引用company_id时,若当前用户未加入base.group_multi_company组,就会触发权限限制报错。你的自定义继承视图account.account.list.dim.inherited中,journal_ids字段的domain使用了[('company_id','=',company_id)],导致无多公司权限的用户无法加载视图。
可行解决方案
方案1:修改视图的domain表达式
将domain中直接引用的company_id替换为当前用户的公司字段user.company_id,所有用户都有权限访问自身关联的公司信息,不会触发权限限制。
找到自定义模块中对应的视图文件account_account_views.xml,定位到account.account.list.dim.inherited视图,修改journal_ids字段的domain部分:
<!-- 修改前 --> <field name="journal_ids" domain="[('company_id','=',company_id)]"/> <!-- 修改后 --> <field name="journal_ids" domain="[('company_id','=',user.company_id)]"/>
方案2:为需要访问该视图的用户分配多公司权限
如果业务场景确实需要多公司支持,可以直接给相关用户分配base.group_multi_company组:
- 进入Odoo后台的设置 > 用户与公司 > 用户
- 编辑目标用户,在访问权限标签页的多公司部分,勾选
多公司权限组(对应XML ID为base.group_multi_company)
方案3:通过字段定义调整权限(适用于自定义字段扩展场景)
如果是自定义扩展了journal_ids字段的domain,可以在字段定义中添加groups属性,明确允许该字段的domain被多公司组访问,或者使用compute方法动态生成domain:
# 示例:在字段定义中指定权限组 journal_ids = fields.Many2many( 'account.journal', domain="[('company_id','=',company_id)]", groups='base.group_multi_company' )
验证修复
修改完成后,升级自定义模块,重新加载视图即可验证是否解决报错。
内容的提问来源于stack exchange,提问作者Talented Developer
相关产品推荐
相关产品推荐

