Odoo 13修改Crash_manager实现错误窗口按钮按用户组显示咨询
Odoo错误弹窗按钮权限控制实现思路
核心问题说明
你之前直接修改crash_manager.xml仅开发者模式生效,是因为Odoo非开发者模式会默认加载预编译压缩的静态资源包,直接修改源码的xml文件不会触发重新编译,修改自然不会生效。正确做法是新建独立自定义模块扩展原生逻辑,避免修改原生web模块代码,也适配生产环境的资源加载规则。
具体实现步骤
- 第一步:后端新增权限标识
先在自定义模块中新增一个权限组(比如命名为可查看错误详情),然后通过扩展ir.http的session_info方法,把当前用户是否属于该权限组的标识传到前端,示例代码如下:from odoo import models, api class IrHttp(models.AbstractModel): _inherit = 'ir.http' def session_info(self): res = super().session_info() res['can_view_error_detail'] = self.env.user.has_group('your_custom_module.group_view_error_detail') return res - 第二步:前端继承CrashManager组件
在自定义模块的static/src/js目录下新建js文件,扩展原生的CrashManager,修改弹窗渲染逻辑:odoo.define('your_custom_module.crash_manager', function (require) { "use strict"; const CrashManager = require('web.CrashManager'); const session = require('web.session'); CrashManager.include({ display_error: function (error) { this._super.apply(this, arguments); // 权限判断,非指定用户组直接隐藏对应按钮 if (!session.can_view_error_detail) { this.$errorModal.find('.o_crash_error_details, .o_crash_copy_button').hide(); } } }); }); - 第三步:注册静态资源到模块配置
在自定义模块的__manifest__.py里把新建的js文件加到assets的web.assets_backend列表里,确保Odoo编译资源时会加载你的扩展代码。 - 第四步:升级自定义模块,刷新浏览器即可生效,生产环境不需要开开发者模式就能正常加载修改内容。
注意事项
- 所有修改都在你自定义的模块内完成,不要改动Odoo原生web模块的任何文件,避免后续Odoo版本升级覆盖你的修改
- 权限组的xml_id要和你自己模块里定义的一致,不要写错
内容的提问来源于stack exchange,提问作者omar amaya
相关产品推荐
相关产品推荐

