You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 17:45:02